#lock-free #vec #pi #vector #node-key #graph-node

pi_append_vec

仅支持追加向量,无锁

26 个版本 (4 个破坏性版本)

0.5.3 2024年6月13日
0.5.0 2024年5月31日
0.3.10 2024年3月15日
0.2.0 2023年12月9日
0.1.5 2023年11月9日

#750数据结构

Download history 7/week @ 2024-04-16 156/week @ 2024-05-14 126/week @ 2024-05-21 654/week @ 2024-05-28 76/week @ 2024-06-04 177/week @ 2024-06-11 9/week @ 2024-06-18 100/week @ 2024-07-02 40/week @ 2024-07-09

每月下载量 140
用于 pi_world

MIT/Apache

15KB
364 代码行

线程安全的slotmap

slotmap

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

[dependencies]
pi_slot = "0.1"

示例

一个简短的示例

use slotmap::{SlotMap, SecondaryMap};

let 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 sec = KeyMap::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 兼容。

依赖关系

~230KB