4 个版本
0.1.3 | 2022 年 5 月 6 日 |
---|---|
0.1.2 | 2022 年 4 月 17 日 |
0.1.1 | 2022 年 4 月 6 日 |
0.1.0 | 2022 年 4 月 5 日 |
#1221 在 Rust 模式
35KB
882 代码行
康托尔是一个处理具有少量值的类型的通用工具包(通常是枚举类型,但不仅限于枚举类型)。此包定义了 Finite
trait 并在其之上实现了几个高效的零分配算法。
应用
- 遍历可能的值
- 值压缩
- 基于数组的映射
- 位图集合
示例
// Define a "Finite" type
#[derive(Finite, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug)]
enum MyType {
A,
B(bool),
C(bool, bool)
}
// Value iteration
let mut num_values = 0;
for _ in MyType::iter() {
num_values += 1;
}
assert_eq!(num_values, 7);
// Value compression
let value = MyType::B(false);
assert_eq!(size_of_val(&value), 3);
let compressed = compress(value);
assert_eq!(size_of_val(&compressed), 1);
assert_eq!(value, compressed.expand());
// Array map
let mut map = ArrayMap::default();
map[MyType::B(true)] = 1;
map[MyType::C(true, true)] = 2;
assert_eq!(map[MyType::A], 0);
assert_eq!(map[MyType::B(true)], 1);
assert_eq!(map[MyType::C(true, true)], 2);
// Bitmap set
let mut set = BitmapSet::none();
set.include(MyType::A);
set.include(MyType::B(false));
set.include(MyType::C(true, false));
assert_eq!(set.size(), 3);
assert!(set.contains(MyType::B(false)));
assert!(!set.contains(MyType::C(false, true)));
依赖项
~1.5MB
~36K SLoC