7个不稳定版本
0.6.3 | 2024年5月5日 |
---|---|
0.6.2 | 2022年4月4日 |
0.6.0 | 2022年3月17日 |
0.5.0 | 2022年3月10日 |
0.3.0 | 2022年2月24日 |
#196 in 算法
每月下载量 38
在 内部使用
140KB
1.5K SLoC
警告
此库处于开发alpha阶段。它在基本级别上功能完整,其接口可能会更改。
有关迁移说明,请参阅:https://github.com/alexmadeathing/dilate/releases
dilate
一个紧凑、高性能的Rust整数膨胀库。
整数膨胀是将笛卡尔索引(例如,坐标)转换为适合在D维算法(如Morton顺序曲线)中使用的格式的过程。膨胀过程取一个整数的位序列,并在每个原始位之间插入一定数量的0位(D - 1
)。因此,原始位序列变得均匀填充。例如
0b1101
2D膨胀变为0b1010001
0b1011
3D膨胀变为0b1000001001
反膨胀或“收缩”的过程正好相反
0b1010001
2D反膨胀变为0b1101
0b1000001001
3D反膨胀变为0b1011
此库还通过标准Rust操作符特质支持对膨胀整数的有限子集的算术运算。虽然比常规整数算术稍微复杂一些,但这些运算仍然非常高效。
支持的膨胀
有关支持的膨胀和可能的类型组合的更多信息,请参阅通过Expand支持的膨胀和通过Fixed支持的膨胀。
特性
- 高性能 - 适用于性能敏感的环境
- 多维 - 适用于多维度应用(在特定条件下可支持多达16个维度)
- 类型安全 - 支持多种输入类型和已知输出类型(支持
u8
、u16
、u32
、u64
、u128
、usize
) no_std
- 适用于嵌入式设备(可以通过std
功能启用额外的标准库功能)- 可扩展 - 基于灵活特质的实现
- 无依赖 - 保持您的依赖关系树整洁
入门指南
首先,将 dilate 链接到您的项目中的 cargo.toml 文件。
在 crates.io 查看最新版本
[dependencies]
dilate = "0.6.3"
# dilate = { version = "0.6.3", features = ["std"] } <- For std features like Add, Sub and Display
接下来,将 dilate 导入您的项目并尝试使用一些功能
use dilate::*;
let original: u8 = 0b1101;
// Dilating
let dilated = original.dilate_expand::<2>();
assert_eq!(dilated.value(), 0b1010001);
// This is the actual dilated type
assert_eq!(dilated, DilatedInt::<Expand<u8, 2>>(0b1010001));
// Undilating
assert_eq!(dilated.undilate(), original);
示例 2 维膨胀和反膨胀使用
use dilate::*;
let original: u8 = 0b1011;
// Dilating
let dilated = original.dilate_expand::<3>();
assert_eq!(dilated.value(), 0b1000001001);
// This is the actual dilated type
assert_eq!(dilated, DilatedInt::<Expand<u8, 3>>(0b1000001001));
// Undilating
assert_eq!(dilated.undilate(), original);
示例 3 维膨胀和反膨胀使用
有关更详细的信息,请参阅 代码参考。
路线图
请参阅 V1.0 路线图讨论。
贡献
欢迎贡献。
对于错误报告,请 提交错误报告。
对于功能请求,请 提交功能请求。
如果您有想法并想直接贡献,欢迎提交拉取请求。如果您只是进行小修改,请直接提交拉取请求。如果您计划进行重大或破坏性的更改,请在讨论区的 想法讨论 中创建,以便我们可以达成共识。
参考和致谢
感谢以下白皮书的作者
- 将整数从膨胀到反膨胀的转换 - Rajeev Raman 和 David S. Wise
- 四叉树和八叉树的整数膨胀和收缩 - Leo Stocco 和 Gunther Schrack
- 在掩码整数上的快速加法 - Michael D Adams 和 David S Wise
已明确允许在每篇论文中复制算法。
许可证
根据您的选择,许可协议为 Apache License,版本 2.0 或 MIT 许可证。
除非您明确表示,否则您有意提交给本软件包的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何其他条款或条件。