#lock-free #vec #pi #vector

pi_append_vec

Only supports append vectors, lock free

19 releases

0.3.10 Mar 15, 2024
0.3.9 Mar 15, 2024
0.3.2 Feb 21, 2024
0.3.0 Jan 31, 2024
0.1.4 Oct 27, 2023

#619 in Data structures

Download history 7/week @ 2024-01-29 126/week @ 2024-02-19 33/week @ 2024-02-26 17/week @ 2024-03-04 931/week @ 2024-03-11 72/week @ 2024-03-18 230/week @ 2024-04-01

1,235 downloads per month
Used in 2 crates

MIT/Apache

13KB
279 lines

Thread-safe slotmap

slotmap

A Rust library providing three containers with persistent unique keys to access stored values. Upon insertion a key is returned that can be used to later access or remove the values. Insertion, deletion and access all take O(1) time with low overhead. Great for storing collections of objects that need stable, safe references but have no clear ownership otherwise, such as game entities or graph nodes. Key maps, KeyMap are also provided that allow you to map further objects to the keys created by one of the slot maps. Please refer to the the documentation for more information.

[dependencies]
pi_slot = "0.1"

Example

A short example:

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]);
}

License

slotmap is released under the Zlib license, a permissive license. It is OSI and FSF approved and GPL compatible.

Dependencies

~220KB