once_map

Crates.io Docs.rs Minimum rustc version

This crate provides OnceMap, a type of HashMap where entries can be written with a shared reference, but can be written ony once. This is similar to [once_cell], but with a map. This enables to reference values inside the map for the lifetime of the map, without the need of further locks.

This makes this type perfect for implementation of caches. A type LazyMap is provided for such cases.

This crate provides such a map heavily optimized for concurrent use, but also a single-threaded version.

Example

```rust let map = OnceMap::new();

// All these are &str pointing directly in the map. // Note that we don't need a mutable reference, so we can have several of // them at the same time. let roses = map.insert(String::from("rose"), || String::from("red")); let violets = map.insert(String::from("violets"), || String::from("blue")); let sugar = map.insert(String::from("sugar"), |_| String::from("sweet"));

asserteq!(roses, "red"); asserteq!(violets, "blue"); assert_eq!(sugar, "sweet");

// The closure is never run here, because we already have a value for "rose" let roses = map.insert(String::from("rose"), || String::from("green")); // The old value did not change asserteq!(roses, "red"); ```