#entity #map #set #default-value #memory-pool #data-structures

已撤销 cretonne-entity

使用实体引用作为映射键的数据结构

使用旧的Rust 2015

0.13.2 2018年7月14日
0.12.0 2018年6月16日

#52 in #memory-pool


9 个crate中(直接使用2个) 使用

Apache-2.0

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 相比,它具有更小的占用空间。

无运行时依赖

特性