use std::collections::HashMap;
pub struct Cacher<T: Fn(u32) -> u32>
{
calculation: T,
cache_pool: HashMap<u32, u32>,
}
impl<T: Fn(u32) -> u32> Cacher<T> {
pub fn new(calculation: T) -> Cacher<T> {
Cacher {
calculation,
cache_pool: HashMap::new(),
}
}
pub fn get(&mut self, arg: u32) -> u32 {
match self.cache_pool.get(&arg) {
None => {
let v = (self.calculation)(arg);
self.cache_pool.insert(arg, v);
v
}
Some(v) => {
v.clone()
}
}
}
}