#tagged-pointers #pointers #tagged #64-bit

nightly tagged_ptr

64位安全标签联合指针数据结构

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年3月1日

#9 in #tagged-pointers

MIT/Apache

15KB
298 行代码,不包括注释

标签联合指针

这是什么?

这个库是不稳定的,可能包含错误!

一个安全的标签联合指针库。此库支持在一个64位字中放置最多8个 Packable3 类型。如果一种类型支持与61位数字的双射,则它可以实现 Packable3。支持的操作包括打包、解包、匹配和修改的解包引用。

提供类型包括 ()boolu16u32f32&'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。此文件不得根据这些条款复制、修改或分发。

没有运行时依赖