4个版本
0.1.5 | 2023年4月22日 |
---|---|
0.1.3 | 2023年4月22日 |
0.1.2 | 2023年4月22日 |
0.1.1 | 2023年4月22日 |
#2268 in 数据结构
每月 34 次下载
12KB
219 行
🪐 tiny_interner
包。
约300行Rust代码,实现了针对您的编程语言编译器的字符串连接功能。
示例
fn main() {
let interner = Interner::default();
let s1 = interner.get_or_intern("test");
let s2 = interner.get_or_intern("test");
assert_eq!(s1, s2);
assert_eq!(interner.resolve(0).unwrap(), "test");
}
lib.rs
:
约300行Rust代码,实现了针对您的编程语言编译器的字符串连接功能。
该包缓存字符串并将它们与唯一的符号相关联。这允许对底层连接字符串进行常数时间的比较和查找。
示例
连接
use tiny_interner::Interner;
let mut interner = Interner::default();
let symbol0 = interner.get_or_intern("A");
let symbol1 = interner.get_or_intern("B");
let symbol2 = interner.get_or_intern("C");
let symbol3 = interner.get_or_intern("A");
assert_ne!(symbol0, symbol1);
assert_ne!(symbol0, symbol2);
assert_ne!(symbol1, symbol2);
assert_eq!(symbol0, symbol3);
解析符号
use tiny_interner::Interner;
let mut interner = Interner::default();
let symbol0 = interner.get_or_intern("A");
let symbol1 = interner.get_or_intern("B");
assert_eq!(interner.resolve(0), Some("A"));
assert_eq!(interner.resolve(1), Some("B"));
assert_eq!(interner.resolve(2), None);
依赖关系
~1.5MB
~24K SLoC