#slotmap #arena-allocator #reference #arena #allocator #invariants #storage

无std slotmapd

orlp/slotmap分支,其中序列化周期不改变可观察行为

6个稳定版本

1.0.11 2024年7月17日
1.0.10 2023年8月8日
1.0.9 2023年8月3日

#55 in 内存管理

Download history 478/week @ 2024-04-29 414/week @ 2024-05-06 593/week @ 2024-05-13 606/week @ 2024-05-20 632/week @ 2024-05-27 456/week @ 2024-06-03 574/week @ 2024-06-10 761/week @ 2024-06-17 532/week @ 2024-06-24 638/week @ 2024-07-01 745/week @ 2024-07-08 629/week @ 2024-07-15 842/week @ 2024-07-22 604/week @ 2024-07-29 359/week @ 2024-08-05 353/week @ 2024-08-12

2,160 每月下载量
用于 flat_spatial

Zlib 许可证

285KB
4.5K SLoC

分支

这是一个orlp/slotmap的分支,其中经过序列化周期不会改变可观察的行为(如新的键值或迭代顺序)。

如果您不需要这个不变性,请使用原始库,因为这个分支的维护可能不会那么频繁。

slotmap_deterministic

一个Rust库,提供三个具有持久唯一键的容器来访问存储的值,分别是 SlotMapHopSlotMapDenseSlotMap。在插入时返回一个键,可以在以后用于访问或删除值。插入、删除和访问都消耗O(1)时间,开销低。非常适合存储需要稳定、安全引用的对象集合,但其他情况下没有明确的拥有权,如游戏实体或图节点。还提供了两个次要映射,分别是 SecondaryMapSparseSecondaryMap,允许您将更多对象映射到由槽映射创建的键。有关更多信息,请参阅文档

slotmap所需的最小稳定Rust版本是1.49。要开始使用slotmap,请将以下内容添加到您的Cargo.toml

[dependencies]
slotmap = "1.0"

示例

简短示例

use slotmapd::{SlotMap, SecondaryMap};

let mut sm = SlotMap::new();
let foo = sm.insert("foo");  // Key generated on insert.
let bar = sm.insert("bar");
assert_eq!(sm[foo], "foo");
assert_eq!(sm[bar], "bar");

sm.remove(bar);
let reuse = sm.insert("reuse");  // Space from bar reused.
assert_eq!(sm.contains_key(bar), false);  // After deletion a key stays invalid.

let mut sec = SecondaryMap::new();
sec.insert(foo, "noun");  // We provide the key for secondary maps.
sec.insert(reuse, "verb");

for (key, val) in sm {
    println!("{} is a {}", val, sec[key]);
}

许可证

slotmap在Zlib许可证下发布,这是一个宽松的许可证。它得到OSI和FSF的批准,并且与GPL兼容。

依赖关系

~170KB