#integer #oct-tree #morton #integer-arithmetic #dilation

无需std dilate

一个紧凑、高性能的Rust整数膨胀库

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
内部使用

MIT/Apache

140KB
1.5K SLoC

Crates.io alexmadeathing MIT License APACHE 2.0 License

警告

此库处于开发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个维度)
  • 类型安全 - 支持多种输入类型和已知输出类型(支持 u8u16u32u64u128usize
  • 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.0MIT 许可证

除非您明确表示,否则您有意提交给本软件包的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,不附加任何其他条款或条件。

无运行时依赖