Skip to content

Instantly share code, notes, and snippets.

@brosenan
Created December 9, 2018 11:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save brosenan/f0eea4c21d6d69f65889d17f9df0be79 to your computer and use it in GitHub Desktop.
Save brosenan/f0eea4c21d6d69f65889d17f9df0be79 to your computer and use it in GitHub Desktop.
use std::collections::HashMap;
use std::hash::Hash;
struct Memoize<F, T1, T2> where F: Fn(&T1) -> T2 {
cache: HashMap<T1, T2>,
func: F,
}
impl<F, T1, T2> Memoize<F, T1, T2> where F: Fn(&T1) -> T2, T1: Eq + Hash, T2: Clone {
fn new(func: F) -> Memoize<F, T1, T2> {
Memoize {cache: HashMap::new(), func}
}
fn get(&mut self, k : T1) -> T2 {
match self.cache.get(&k) {
Some(v) => v.clone(),
None => {
let v = (self.func)(&k);
self.cache.insert(k, v.clone());
v
}
}
}
}
fn main() {
let mut f = Memoize::new(|x| x + 2);
println!("Hello, world! {} {}", f.get(2), f.get(5));
}
@brosenan
Copy link
Author

brosenan commented Dec 9, 2018

Memoization example in Rust

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment