1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年3月1日 |
---|
#9 in #tagged-pointers
15KB
298 行代码,不包括注释
标签联合指针
这是什么?
这个库是不稳定的,可能包含错误!
一个安全的标签联合指针库。此库支持在一个64位字中放置最多8个 Packable3
类型。如果一种类型支持与61位数字的双射,则它可以实现 Packable3
。支持的操作包括打包、解包、匹配和修改的解包引用。
提供类型包括 ()
、bool
、u16
、u32
、f32
、&'a T'
、Rc<T>
、Box<T>
、*T
、*mut T
。
示例
type ThinVal = Packed<Box<u64>, Box<u64>, f32, u32, bool>;
#[test]
fn test_example() {
let mut y : ThinVal = Unpacked::C(1.6f32).pack();
match *y.unpack_mut() {
Unpacked::A(ref mut b) => **b += 1,
Unpacked::B(ref mut b) => **b += 5,
Unpacked::C(ref mut f) => {*f += 4.8f32},
Unpacked::D(ref mut u) => *u += 2,
Unpacked::E(ref mut b) => *b ^= true,
_ => panic!()
}
println!("{:?}", y.unpack());
}
计划中的功能
- 可变位数的泛化。(使用 Peano 的泛型重代码。)
- NAN-装箱。
- 一些文档。
- 将 Packable 实现移动到其他文件。
- 提供派生 std 特性:Clone、Copy、Eq、PartialEq、PartialOrd、Ord、Debug、Display。
安装
将此添加到您的 Cargo.toml
[dependencies]
tagged_ptr = "0.1"
并将其添加到您的 crate 根目录
extern crate tagged_ptr;
变更日志
- 0.1.0 添加了没有文档的64位标签联合指针。
许可协议
双许可以与 Rust 项目兼容。
根据您的选择,许可协议为 Apache 许可证,版本 2.0 http://www.apache.org/licenses/LICENSE-2.0 或 MIT 许可证 http://opensource.org/licenses/MIT。此文件不得根据这些条款复制、修改或分发。