use std::sync::Arc;
use moka::sync::{Cache, ConcurrentCacheExt};
use super::vector::VectorIndex;
#[derive(Clone)]
pub struct IndexCache {
cache: Arc<Cache<String, Arc<dyn VectorIndex>>>,
}
impl IndexCache {
pub(crate) fn new(capacity: usize) -> Self {
Self {
cache: Arc::new(Cache::new(capacity as u64)),
}
}
#[allow(dead_code)]
pub(crate) fn len(&self) -> usize {
self.cache.sync();
self.cache.entry_count() as usize
}
pub(crate) fn get(&self, key: &str) -> Option<Arc<dyn VectorIndex>> {
self.cache.get(key)
}
pub(crate) fn insert(&self, key: &str, index: Arc<dyn VectorIndex>) {
self.cache.insert(key.to_string(), index);
}
}