formualizer_eval/engine/
cache.rs1use std::collections::HashMap;
4
5use crate::engine::masks::DenseMask;
6
7pub type CriteriaKey = String;
9
10pub struct CriteriaMaskCache {
12 cache: HashMap<String, DenseMask>,
13 entries_cap: usize,
14}
15
16impl CriteriaMaskCache {
17 pub fn new(entries_cap: usize) -> Self {
18 Self {
19 cache: HashMap::new(),
20 entries_cap,
21 }
22 }
23
24 pub fn get(&self, key: &str) -> Option<DenseMask> {
25 self.cache.get(key).cloned()
26 }
27
28 pub fn insert(&mut self, key: String, mask: DenseMask) -> bool {
29 if self.cache.len() >= self.entries_cap && !self.cache.contains_key(&key) {
31 if let Some(first_key) = self.cache.keys().next().cloned() {
32 self.cache.remove(&first_key);
33 }
34 }
35 self.cache.insert(key, mask);
36 true
37 }
38
39 pub fn clear(&mut self) {
40 self.cache.clear();
41 }
42
43 pub fn len(&self) -> usize {
44 self.cache.len()
45 }
46
47 pub fn is_empty(&self) -> bool {
48 self.cache.is_empty()
49 }
50}