use std::sync::{Arc, Mutex};
use lru_time_cache::LruCache;
use super::vector::VectorIndex;
#[derive(Clone)]
pub struct IndexCache {
capacity: usize,
cache: Arc<Mutex<LruCache<String, Arc<dyn VectorIndex>>>>,
}
impl IndexCache {
pub(crate) fn new(capacity: usize) -> Self {
Self {
capacity,
cache: Arc::new(Mutex::new(LruCache::with_capacity(capacity))),
}
}
#[allow(dead_code)]
pub(crate) fn len(&self) -> usize {
let cache = self.cache.lock().unwrap();
cache.len()
}
pub(crate) fn get(&self, key: &str) -> Option<Arc<dyn VectorIndex>> {
let mut cache = self.cache.lock().unwrap();
let idx = cache.get(key);
idx.cloned()
}
pub(crate) fn insert(&self, key: &str, index: Arc<dyn VectorIndex>) {
if self.capacity == 0 {
return;
}
let mut cache = self.cache.lock().unwrap();
cache.insert(key.to_string(), index);
}
}