Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::collections::hash_map;
- use std::hash::Hash;
- pub struct Cacher<T, K, V>
- where
- T: Fn(K) -> V,
- {
- calculation: T,
- values: hash_map::HashMap<K, V>,
- }
- impl<T, K: Eq + Hash + Clone, V> Cacher<T, K, V>
- where
- T: Fn(K) -> V,
- {
- pub fn new(calculation: T) -> Cacher<T, K, V> {
- Cacher {
- calculation,
- values: hash_map::HashMap::new(),
- }
- }
- pub fn value(&mut self, k: K) -> &V {
- if self.values.contains_key(&k) {
- return &self.values[&k];
- }
- self.values.insert(k.clone(), (self.calculation)(k.clone()));
- self.values.get(&k).unwrap()
- }
- }
- fn main() {
- let mut cacher = Cacher::new(|x| x);
- let run1 = cacher.value(5) as *const i32;
- let run2 = cacher.value(7) as *const i32;
- assert_ne!(run1, run2);
- }
Add Comment
Please, Sign In to add comment