plain-cache 0.2.2

Highly performant thread-safe cache with a focus on simplicity
Documentation
use std::sync::atomic::{AtomicU64, Ordering};

/// Cache performance statistics.
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Default)]
pub struct Stats {
    pub miss_count: u64,
    pub hit_count: u64,
    pub eviction_count: u64,
    pub millis_elapsed: u128,
}

#[derive(Debug, Default)]
pub(crate) struct Counters {
    hit_count: AtomicU64,
    miss_count: AtomicU64,
    eviction_count: AtomicU64,
}

impl Counters {
    pub(crate) fn hit_count(&self) -> u64 {
        self.hit_count.load(Ordering::Acquire)
    }

    pub(crate) fn miss_count(&self) -> u64 {
        self.miss_count.load(Ordering::Acquire)
    }

    pub(crate) fn eviction_count(&self) -> u64 {
        self.eviction_count.load(Ordering::Acquire)
    }

    pub(crate) fn increment_hit_count(&self) {
        self.hit_count.fetch_add(1, Ordering::AcqRel);
    }

    pub(crate) fn increment_miss_count(&self) {
        self.miss_count.fetch_add(1, Ordering::AcqRel);
    }

    pub(crate) fn increment_eviction_count(&self) {
        self.eviction_count.fetch_add(1, Ordering::AcqRel);
    }

    pub(crate) fn reset(&self) {
        self.hit_count.store(0, Ordering::Release);
        self.miss_count.store(0, Ordering::Release);
        self.eviction_count.store(0, Ordering::Release);
    }
}