Skip to main content

BoundedLruCache

Struct BoundedLruCache 

Source
pub struct BoundedLruCache<K, V> { /* private fields */ }
Expand description

Small bounded LRU cache used by renderer hot-path caches.

Hits update recency in place, so the common path is a single hash lookup. Eviction unlinks the oldest entry, which costs the same whether the cache holds ten entries or ten thousand.

The recency order is a linked list rather than a timestamp per entry because a timestamp makes eviction a scan for the minimum. These caches are large – thousands of glyph masks – and the workloads that need them most are the ones that miss steadily: text whose size animates re-rasterises every glyph of every frame, and every one of those inserts was walking the whole table to decide what to drop.

A key is held twice, once in the index and once in its slot, so an eviction can find the index entry to remove without searching for it. The keys these caches use are small Copy structs, and the duplicate is what keeps the links free of raw pointers.

Implementations§

Source§

impl<K, V> BoundedLruCache<K, V>
where K: Clone + Eq + Hash,

Source

pub fn new(cap: NonZeroUsize) -> Self

Source

pub fn with_capacity_at_least_one(cap: usize) -> Self

Source

pub fn len(&self) -> usize

Source

pub fn is_empty(&self) -> bool

Source

pub fn cap(&self) -> NonZeroUsize

Source

pub fn contains(&self, key: &K) -> bool

Source

pub fn get(&mut self, key: &K) -> Option<&V>

Source

pub fn peek(&self, key: &K) -> Option<&V>

Source

pub fn get_mut(&mut self, key: &K) -> Option<&mut V>

Source

pub fn push(&mut self, key: K, value: V) -> Option<(K, V)>

Source

pub fn put(&mut self, key: K, value: V) -> Option<V>

Source

pub fn pop_lru(&mut self) -> Option<(K, V)>

Source

pub fn pop(&mut self, key: &K) -> Option<V>

Source

pub fn iter(&self) -> impl Iterator<Item = (&K, &V)>

Entries most recently used first.

Auto Trait Implementations§

§

impl<K, V> Freeze for BoundedLruCache<K, V>

§

impl<K, V> RefUnwindSafe for BoundedLruCache<K, V>

§

impl<K, V> Send for BoundedLruCache<K, V>
where K: Send, V: Send,

§

impl<K, V> Sync for BoundedLruCache<K, V>
where K: Sync, V: Sync,

§

impl<K, V> Unpin for BoundedLruCache<K, V>
where K: Unpin, V: Unpin,

§

impl<K, V> UnsafeUnpin for BoundedLruCache<K, V>

§

impl<K, V> UnwindSafe for BoundedLruCache<K, V>
where K: UnwindSafe, V: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.