Skip to main content

ArcCache

Struct ArcCache 

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

Adaptive Replacement Cache with configurable capacity and optional per-entry TTL.

§Type parameters

  • K: key type – must be Eq + Hash + Clone.
  • V: value type.

Implementations§

Source§

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

Source

pub fn new(cap: usize) -> Self

Create a new ArcCache with the given capacity.

Capacity must be at least 1; a capacity of 0 is treated as 1 internally.

Source

pub fn p(&self) -> usize

Return the current adaptive target p.

Source

pub fn len(&self) -> usize

Total live-data entries (|t1| + |t2|).

Source

pub fn is_empty(&self) -> bool

Return true if no live entries are cached.

Source

pub fn cap(&self) -> usize

Cache capacity.

Source

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

Look up key and return a reference to its value, promoting as needed.

Expired entries are lazily removed and treated as misses.

Source

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

Insert key -> value into the cache (no TTL).

Source

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

Insert key -> value into the cache with a TTL.

Source

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

Read a value without promoting it.

Checks t1 and t2 but does NOT move entries or trigger ghost adaptation. Expired entries return None (removal happens on next mutable access).

Source

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

Return true if key is present in t1 or t2 and not expired (without promotion).

Source

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

Remove the entry for key from the cache.

Returns the value if it was present in t1 or t2. Also removes any ghost entry from b1/b2.

Source

pub fn clear(&mut self)

Remove all entries from the cache (live + ghost).

Source

pub fn resize(&mut self, new_cap: usize)

Dynamically resize the cache capacity.

If new_cap is smaller than the current live count, entries are evicted via the REPLACE routine until the count fits.

Trait Implementations§

Source§

impl<K, V> Cache<K, V> for ArcCache<K, V>
where K: Eq + Hash + Clone,

Source§

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

Look up key, returning a reference to the value if present. Read more
Source§

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

Insert or update key -> value without a TTL. Read more
Source§

fn put_with_ttl(&mut self, key: K, value: V, ttl: Duration) -> Option<V>

Insert or update key -> value with a time-to-live. Read more
Source§

fn len(&self) -> usize

Return the number of live entries currently in the cache.
Source§

fn cap(&self) -> usize

Return the maximum number of entries the cache can hold.
Source§

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

Remove the entry associated with key, returning its value if present. Read more
Source§

fn clear(&mut self)

Remove all entries from the cache.
Source§

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

Look up key without updating access metadata (no promotion). Read more
Source§

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

Return true if key is present in the cache (without promotion). Read more
Source§

fn resize(&mut self, new_cap: usize)

Dynamically resize the cache capacity. Read more
Source§

fn values(&self) -> Vec<&V>

Return all live (non-expired) values currently stored in the cache. Read more
Source§

fn is_empty(&self) -> bool

Return true if the cache holds no entries.
Source§

fn get_or_insert(&mut self, key: K, default: impl FnOnce() -> V) -> &V
where K: Clone,

Return &V for key, inserting default() if the key is absent. Read more
Source§

fn warm(&mut self, iter: impl IntoIterator<Item = (K, V)>)

Pre-populate the cache with (key, value) pairs from an iterator. Read more
Source§

impl<K: Debug, V> Debug for ArcCache<K, V>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

impl<K, V> Unpin for ArcCache<K, V>

§

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

§

impl<K, V> UnwindSafe for ArcCache<K, V>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.