#lru-cache #generational-arena #lru

generational-lru

基于世代竞技场的100%安全的LRU缓存实现

3个版本

0.1.2 2022年6月27日
0.1.1 2022年6月26日
0.1.0 2022年6月26日

#264缓存

MIT 许可证

38KB
757

generational-lru

ci codecov rustdoc Crates.io

Crate提供了一个100%安全、基于世代竞技场的LRU缓存实现。

use generational_lru::lrucache::{LRUCache, CacheError};

let capacity = 5;

let mut lru_cache = LRUCache::<i32, i32>::with_capacity(capacity);
assert_eq!(lru_cache.query(&0), Err(CacheError::CacheMiss));

for ele in 0..capacity {
    let x = ele as i32;
    assert!(lru_cache.insert(x, x).is_ok());
}

for ele in 0..capacity {
    let x = ele as i32;
    assert_eq!(lru_cache.query(&x), Ok(&x));
}

let x = capacity as i32;
assert!(lru_cache.insert(x, x).is_ok());

assert_eq!(lru_cache.query(&x), Ok(&x));

assert_eq!(lru_cache.query(&0), Err(CacheError::CacheMiss));

let x = capacity as i32 / 2;
assert_eq!(lru_cache.remove(&x), Ok(x));

assert_eq!(lru_cache.query(&x), Err(CacheError::CacheMiss));
assert_eq!(lru_cache.remove(&x), Err(CacheError::CacheMiss));

// zero capacity LRUCache is unusable
let mut lru_cache = LRUCache::<i32, i32>::with_capacity(0);

assert!(matches!(
    lru_cache.insert(0, 0),
    Err(CacheError::CacheBroken(_))
));

有关更多详细信息,请参阅API文档

用法

这是一个库Crate。您可以在以下方式将其包含在您的Cargo.toml

[dependencies]
generational-lru = "0.1"

许可证

此存储库受MIT许可证许可。有关完整许可证文本,请参阅LICENSE

无运行时依赖项