0.1.3 |
|
---|---|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#23 在 #utf8
每月下载量 33 次
4MB
261 行代码(不包括注释)
Chisel - CharStream
概述
该仓库包含一个非常简单、精简的转码器实现,它将从给定的 Read
实现中消费 u8
字节,并将其转换为 Rust 内部 char
类型。这是从正在进行的一个玩具解析器项目中衍生出来的库,用作解析器扫描/词法分析阶段的初始阶段,以避免在 u8
序列 -> char
转换期间进行不必要的分配。
请注意,实现相当快速且宽松,并在底层利用一些位操作与 unsafe transmute
函数一起进行转换。 转换过程中不使用任何字符串分配。对输入字节的最小检查(除了位掩码之外)——它并不打算成为一个 UTF8 验证库。
用法
用法非常简单,只要你有一个实现 Read
的东西来提供一些字节
从切片创建
只需将您的数组包装在一个读取器中,然后将其插入到新的 CharStream
实例中
let buffer: &[u8] = &[0x10, 0x12, 0x23, 0x12];
let mut reader = BufReader::new(buffer);
let _stream = CharStream::new(&mut reader);
从文件创建
只需打开您的文件,包装在 Read
实例中,然后将其插入到新的 CharStream
实例中
let path = PathBuf::from("somefile.txt");
let f = File::open(path);
let mut reader = BufReader::new(f.unwrap());
let _stream = CharStream::new(&mut reader);
消费 char
您可以从包装在 Result
类型中的读取器中拉出新 char
loop {
let result = stream.next_char();
if result.is_err() {
break;
}
}
或者,您可以直接使用 CharStream
作为 Iterator
let stream = CharStream::new(&mut reader);
for c in stream {
match c {
Some(c) => ...
None => ...
}
}