#lru-cache #lru #cache

no-std weight-lru

A LRU cache implementation

1 unstable release

Uses old Rust 2015

0.0.1 Feb 12, 2025

#60 in #lru

Download history 149/week @ 2025-02-11

149 downloads per month

MIT license

110KB
2K SLoC

Weight LRU Cache

This repository forked from LRU Cache.

Build Badge Codecov Badge crates.io Badge docs.rs Badge License Badge

Documentation

An implementation of a LRU cache. The cache supports put, get, get_mut and pop operations, all of which are O(1). This crate was heavily influenced by the LRU Cache implementation in an earlier version of Rust's std::collections crate.

The MSRV for this crate is 1.65.0.

Example

Below is a simple example of how to instantiate and use a LRU cache.

extern crate weight_lru;

use weight_lru::LruCache;
use std::num::NonZeroUsize;

fn main() {
    let mut cache = LruCache::new(NonZeroUsize::new(2).unwrap());
    cache.put("apple", 3, NoneZeroUsize::new(1).unwrap());
    cache.put("banana", 2, NoneZeroUsize::new(1).unwrap());

    assert_eq!(*cache.get(&"apple").unwrap(), 3);
    assert_eq!(*cache.get(&"banana").unwrap(), 2);
    assert!(cache.get(&"pear").is_none());

    assert_eq!(cache.put("banana", 4, NoneZeroUsize::new(1).unwrap()), Some(2));
    assert_eq!(cache.put("pear", 5, NoneZeroUsize::new(1).unwrap()), None);

    assert_eq!(*cache.get(&"pear").unwrap(), 5);
    assert_eq!(*cache.get(&"banana").unwrap(), 4);
    assert!(cache.get(&"apple").is_none());

    {
        let v = cache.get_mut(&"banana").unwrap();
        *v = 6;
    }

    assert_eq!(*cache.get(&"banana").unwrap(), 6);
}

Dependencies

~1MB
~12K SLoC