Consteval converter to ascii keywords

This commit is contained in:
Andrew Golovashevich 2025-11-18 17:30:01 +03:00
parent dfe4a58973
commit b96926f5a0
3 changed files with 41 additions and 4 deletions

View File

@ -1,5 +1,7 @@
#[cfg(test)]
use crate::{AsciiChar, AsciiCharConvertable};
use source_stream_0::{CollectedSubstring, Pos, SourceStream};
use source_stream_0::{CollectResult, CollectedSubstring, Pos, SourceStream};
use source_stream_0_converter_0::{
ConvertedSourceStream, StreamConverter, StreamConverter_Char, StreamConverter_Pos,
StreamConverter_Pos_Noop, StreamConverter_Substring,
@ -10,8 +12,7 @@ use source_stream_0_default_streams_0::iterators::{
};
use source_stream_0_default_streams_0::pos::IndexPosCounter;
use std::marker::PhantomData;
#[cfg(test)]
use crate::asciiLiteral;
struct ConverterImpl {}
@ -45,6 +46,7 @@ fn printAscii(a: Option<AsciiChar>) {
}
}
#[test]
fn sandbox() {
let src8 = SourceStreamOverIterator::wrap(StrSourceIterator::start(
@ -55,9 +57,23 @@ fn sandbox() {
let cvt = ConverterImpl {};
let mut src = ConvertedSourceStream::convert(src8, cvt);
/* let cs = src.collect();
match cs {
CollectResult::EOF => {}
CollectResult::NotMatches => {}
CollectResult::Matches(z) => {
z.compareKeyword(&asciiLiteral(b"azboba"));
();
}
}
*/
for _ in 0..10 {
// println!("{}", src.pos());
printAscii(src.currentChar());
src.nextChar();
}
}

19
ascii/src/keyword.rs Normal file
View File

@ -0,0 +1,19 @@
#![feature(const_for)]
use crate::{AsciiChar};
pub const fn asciiLiteral<const S: usize>(
str: &[u8; S],
) -> [AsciiChar; S] {
let mut out: [AsciiChar; S] = [AsciiChar::NOT_ASCII; S];
let mut i = 0usize;
while i < S {
let a = str[i] as u32;
if (a >= 128) {
panic!("Not ascii char in literal");
}
out[i] = AsciiChar::ASCII(a as u8);
i += 1;
}
return out;
}

View File

@ -1,6 +1,8 @@
mod _sandbox;
mod char;
mod converters;
mod _sandbox;
mod keyword;
pub use crate::char::AsciiChar;
pub use crate::converters::AsciiCharConvertable;
pub use crate::keyword::asciiLiteral;