diff --git a/src/components/util/cache.rs b/src/components/util/cache.rs index 5b8bcf4e03b..043d0c2b0d7 100644 --- a/src/components/util/cache.rs +++ b/src/components/util/cache.rs @@ -6,7 +6,6 @@ use collections::HashMap; use rand; use rand::Rng; use std::hash::{Hash, sip}; -use std::slice; use std::slice::Items; #[cfg(test)] @@ -179,7 +178,7 @@ impl Cache for LRUCache { } pub struct SimpleHashCache { - entries: ~[Option<(K,V)>], + entries: Vec>, k0: u64, k1: u64, } @@ -188,7 +187,7 @@ impl SimpleHashCache { pub fn new(cache_size: uint) -> SimpleHashCache { let mut r = rand::task_rng(); SimpleHashCache { - entries: slice::from_elem(cache_size, None), + entries: Vec::from_elem(cache_size, None), k0: r.gen(), k1: r.gen(), } @@ -207,8 +206,8 @@ impl SimpleHashCache { #[inline] pub fn find_equiv<'a,Q:Hash+Equiv>(&'a self, key: &Q) -> Option<&'a V> { let bucket_index = self.bucket_for_key(key); - match self.entries[bucket_index] { - Some((ref existing_key, ref value)) if key.equiv(existing_key) => Some(value), + match self.entries.get(bucket_index) { + &Some((ref existing_key, ref value)) if key.equiv(existing_key) => Some(value), _ => None, } } @@ -217,13 +216,13 @@ impl SimpleHashCache { impl Cache for SimpleHashCache { fn insert(&mut self, key: K, value: V) { let bucket_index = self.bucket_for_key(&key); - self.entries[bucket_index] = Some((key, value)) + *self.entries.get_mut(bucket_index) = Some((key, value)) } fn find(&mut self, key: &K) -> Option { let bucket_index = self.bucket_for_key(key); - match self.entries[bucket_index] { - Some((ref existing_key, ref value)) if existing_key == key => Some((*value).clone()), + match self.entries.get(bucket_index) { + &Some((ref existing_key, ref value)) if existing_key == key => Some((*value).clone()), _ => None, } }