Crates.io | schnellru |
lib.rs | schnellru |
version | 0.2.3 |
source | src |
created_at | 2022-12-20 15:40:39.73651 |
updated_at | 2024-05-14 06:40:17.35202 |
description | A fast and flexible LRU map |
homepage | https://github.com/koute/schnellru |
repository | https://github.com/koute/schnellru |
max_upload_size | |
id | 742411 |
size | 113,373 |
This repository contains a fast and flexible LRU map.
lru
crate, and with less memory overhead.indexmap
,
but with added support for O(1) removals without changing the element order (where indexmap
only supports O(n) non-perturbing removals).no_std
.use schnellru::{LruMap, ByLength};
let mut map = LruMap::new(ByLength::new(3));
// Insert three elements.
map.insert(1, "one");
map.insert(2, "two");
map.insert(3, "three");
assert_eq!(map.len(), 3);
// They're ordered according to which one was inserted last.
let mut iter = map.iter();
assert_eq!(iter.next().unwrap(), (&3, &"three"));
assert_eq!(iter.next().unwrap(), (&2, &"two"));
assert_eq!(iter.next().unwrap(), (&1, &"one"));
// Access the least recently inserted one.
assert_eq!(*map.get(&1).unwrap(), "one");
// Now the order's changed.
// The element we've accessed was moved to the front.
let mut iter = map.iter();
assert_eq!(iter.next().unwrap(), (&1, &"one"));
assert_eq!(iter.next().unwrap(), (&3, &"three"));
assert_eq!(iter.next().unwrap(), (&2, &"two"));
// Insert a fourth element.
// This will automatically pop the least recently accessed one.
map.insert(4, "four");
// Still the same number of elements.
assert_eq!(map.len(), 3);
// And this is the one which was removed.
assert!(map.peek(&2).is_none());
// And here's the new order.
let mut iter = map.iter();
assert_eq!(iter.next().unwrap(), (&4, &"four"));
assert_eq!(iter.next().unwrap(), (&1, &"one"));
assert_eq!(iter.next().unwrap(), (&3, &"three"));
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.