使用旧的Rust 2015
0.13.2 |
|
---|---|
0.12.0 |
|
#52 in #memory-pool
在 9 个crate中(直接使用2个) 使用
68KB
1.5K SLoC
Cretonne已被重命名为Cranelift!对于未来版本,请参阅cranelift-entity
crate。
此crate包含由核心Cretonne代码生成器使用的基于数组的数结构,这些结构使用密集编号的实体引用作为映射键。
lib.rs
:
使用密集编号实体引用作为映射键的基于数组的数结构。
此crate定义了基于数组的多个数结构。这些数组不是使用通常的 usize
作为索引,而是使用实体引用,即包裹在新的类型中的整数。这有几个优点
- 改进的类型安全性。各种映射和集合类型接受特定的键类型,因此不会有关于数组索引含义的混淆,就像普通数组一样。
- 更小的索引。正常的
usize
索引通常是64位,这对于大多数用途来说太大。实体引用类型可以更小,从而允许更紧凑的数据结构。
应该由类型实现 EntityRef
特性来作为索引使用。 entity_impl!
宏为常见的包裹 u32
的类型提供了方便的默认值。
PrimaryMap
用于跟踪实体向量,并为每个实体分配一个唯一的实体引用。EntityMap
用于将辅助信息关联到实体。该映射实现为一个简单的向量,因此它不会跟踪哪些实体已被插入。相反,任何未知实体都映射到默认值。SparseMap
用于将辅助信息关联到少量实体。它准确地跟踪哪些实体已被插入。这是一个专用数据结构,可能会占用大量内存,因此在使用之前请阅读文档。EntitySet
用于表示实体的次要集合。该集合以简单的向量实现,因此它不跟踪哪些实体已插入到主映射中。相反,任何未知实体都不在集合中。EntityList
是从关联的内存池分配的实体引用列表的紧凑表示。与Vec
相比,它具有更小的占用空间。