Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::collections::HashMap;
- use std::hash::Hash;
- pub struct Cache<K, V, F> {
- map: HashMap<K, V>,
- f: F,
- }
- impl<'a, K, V, F> Cache<K, V, F>
- where
- K: Hash + Eq + Copy,
- V: Copy,
- F: FnMut(K, Box<dyn FnMut(K) -> V + 'a>) -> V,
- {
- pub fn new(f: F) -> Cache<K, V, F> {
- let map = HashMap::new();
- Cache { map, f }
- }
- pub fn get(&'a mut self, key: K) -> V {
- if let Some(&value) = self.map.get(&key) {
- return value;
- }
- let value = (self.f)(key, Box::new(|k: K| self.get(k)));
- self.map.insert(key, value);
- value
- }
- }
Add Comment
Please, Sign In to add comment