10 个版本

0.2.0-rc.02023年7月8日
0.1.8 2022年12月30日
0.1.7 2022年11月14日

#1001 in Rust 模式

每月 33 下载

MIT/Apache

34KB
681

Enum Ptr

crates.io docs.rs

此软件包提供了一个自定义 derive 宏 EnumPtr,以以最低成本自动生成 TCompact<T> 之间的桥梁。Compact<T>T 的紧凑表示,它只有一个指针宽度。

例如,以下代码

use enum_ptr::EnumPtr;

#[derive(EnumPtr)]
#[repr(C, usize)]
enum Foo<'a> {
    A(&'a i32),
    B(Box<i32>),
}

将生成

impl<'a> From<Foo<'a>> for Compact<Foo<'a>> {
    // ...
}

impl<'a> From<Compact<Foo<'a>>> for Foo<'a> {
    // ...
}

由于 &i32Box<i32> 都由 4 字节对齐,它们的最低 2 位总是零。 Compact<Foo<'a>> 利用这些位来存储标记(判别值)。

功能

  • 无需编写不安全指针操作
  • 支持各种类型并可扩展
  • 支持 no_std
  • 最小类型转换成本
  • 启用严格来源后,通过 cargo +nightly miri test

测试

$ cargo test
$ cargo +nightly miri test

致谢

  • 感谢 @oxalica 对此软件包进行审查并提供大量有用的建议。

许可证

此项目可使用以下任一许可证

任选其一。

依赖项

~0.7–1.1MB
~26K SLoC