10 个版本
0.2.0-rc.0 | 2023年7月8日 |
---|---|
0.1.8 | 2022年12月30日 |
0.1.7 | 2022年11月14日 |
#1001 in Rust 模式
每月 33 下载
34KB
681 行
Enum Ptr
此软件包提供了一个自定义 derive 宏 EnumPtr
,以以最低成本自动生成 T
和 Compact<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> {
// ...
}
由于 &i32
和 Box<i32>
都由 4 字节对齐,它们的最低 2 位总是零。 Compact<Foo<'a>>
利用这些位来存储标记(判别值)。
功能
- 无需编写不安全指针操作
- 支持各种类型并可扩展
- 支持
no_std
- 最小类型转换成本
- 启用严格来源后,通过
cargo +nightly miri test
测试
$ cargo test
$ cargo +nightly miri test
致谢
- 感谢 @oxalica 对此软件包进行审查并提供大量有用的建议。
许可证
此项目可使用以下任一许可证
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖项
~0.7–1.1MB
~26K SLoC