Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. use std::collections::HashMap;
  2.  
  3. struct Cacher<T, I, O> where I: std::hash::Hash, I: std::cmp::Eq, T: Fn(&I) -> O {
  4. func: T,
  5. map: HashMap<I, O>,
  6. }
  7.  
  8. impl<T, I, O> Cacher<T, I, O> where I: std::hash::Hash, I: std::cmp::Eq, T: Fn(&I) -> O {
  9. fn new(calc: T) -> Cacher<T, I, O> {
  10. Cacher{
  11. func: calc,
  12. map: HashMap::new()}
  13. }
  14.  
  15. fn value(&mut self, v: I) -> O {
  16. let c = self.map.get(&v);
  17. match c {
  18. Some(a) => *a,
  19. None => {
  20. // println!("Calculating for {}", v);
  21. let r = (self.func)(&v);
  22. self.map.insert(v, r);
  23. r
  24. }
  25. }
  26. }
  27. }
  28.  
  29. fn main() {
  30.  
  31. let mut v = Cacher::new(|x| x + 1);
  32.  
  33. println!("{}", &mut v.value(1));
  34. println!("{}", &mut v.value(1));
  35. println!("{}", &mut v.value(2));
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement