1 个不稳定版本
0.1.0 | 2024年6月14日 |
---|
#1503 在 数据结构
14KB
215 行
关于项目
允许创建一个类似于表的结构的数组结构,该结构维护多个不同类型的数组,同时保持所有数组的相同大小,并在其整个生命周期中为每个属性创建一个共享索引。
提供 Table 结构体,允许存储由不同类型组成的数据行。此结构可以表示为一个 数组结构,并构建为一个 HashMap,其中键是列标识符,值是 Column。每个 Column 是一个连续的数组,并且每行组件都可以在每个 Column 中使用相同的索引访问。
(返回顶部)
构建工具
- Nohash 用于创建没有哈希算法的 hashmap(键是 u32)- https://github.com/tetcoin/nohash
- 基于 bevy BlobVec 实现 - https://github.com/bevyengine/bevy/blob/main/crates/bevy_ecs
(返回顶部)
入门
这是使用此 crate 创建一个具有简单列的表结构体的示例。
安装
在 cargo.toml 中添加依赖项
[dependencies]
type-erased-table = "0.1.0"
(返回顶部)
使用
创建表格后,只需添加一个列并开始填充它。
let mut table = Table::new(1);
let value: u32 = 2;
// Get Layout from concrete type
let layout = Layout::for_value(&value);
// Create column with u32 identifier
let column_info = ColumnInfo::new(1, layout);
table.add_column(column_info);
let column = table.get_column_mut(1).unwrap();
// Push data into row of column by passing pointer as *const u8
unsafe { column.push(ptr::addr_of!(value) as *const u8) }
// Read value of row 0
let row_ptr = unsafe { column.get(0) };
let row_value: u32 = unsafe { (*row_ptr).into() };
(返回顶部)
贡献
贡献是使开源社区成为一个如此美妙的学习、灵感和创造之地的原因。您所做的任何贡献都将受到 高度赞赏。
如果您有任何改进建议,请分叉存储库并创建一个拉取请求。别忘了为项目加星!再次感谢!
- 分叉项目
- 创建您的功能分支 (
git checkout -b feature/AmazingFeature
) - 提交您的更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 打开拉取请求
(返回顶部)
许可证
在MIT许可证下分发。
(返回顶部)
联系
项目链接: https://github.com/ValentinRio/type-erased-table
(返回顶部)
依赖项
约15KB