use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering};
#[derive(Debug, Default, Eq, PartialEq)]
pub struct CacheStatistics {
pub hit: usize,
pub miss: usize,
pub invalidate: usize,
}
#[derive(Default)]
pub(crate) struct Statistics {
hit: AtomicUsize,
miss: AtomicUsize,
invalidate: AtomicUsize,
}
impl Statistics {
pub(crate) fn increase_hit(&self, val: usize) {
self.hit.fetch_add(val, Ordering::Relaxed);
}
pub(crate) fn increase_miss(&self, val: usize) {
self.miss.fetch_add(val, Ordering::Relaxed);
}
pub(crate) fn increase_invalidate(&self, val: usize) {
self.invalidate.fetch_add(val, Ordering::Relaxed);
}
}
impl From<Arc<Statistics>> for CacheStatistics {
fn from(value: Arc<Statistics>) -> Self {
CacheStatistics {
hit: value.hit.load(Ordering::Relaxed),
miss: value.miss.load(Ordering::Relaxed),
invalidate: value.invalidate.load(Ordering::Relaxed),
}
}
}