24 releases
0.4.21 | Oct 14, 2024 |
---|---|
0.4.19 | Aug 28, 2024 |
0.4.18 | May 15, 2024 |
0.4.15 | Feb 13, 2024 |
0.3.1 | Jul 10, 2022 |
#22 in Caching
42,923 downloads per month
Used in 15 crates
(5 directly)
65KB
2K
SLoC
once_map
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
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"));
assert_eq!(roses, "red");
assert_eq!(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
assert_eq!(roses, "red");
Dependencies
~1.2–6.5MB
~33K SLoC