about summary refs log tree commit diff
path: root/src/libcore/send_map.rs
diff options
context:
space:
mode:
authorErick Tryzelaar <erick.tryzelaar@gmail.com>2012-09-14 16:02:02 -0700
committerErick Tryzelaar <erick.tryzelaar@gmail.com>2012-09-15 13:38:41 -0700
commit1834249e8dff3419f33ee8595a4bf347e50c3c62 (patch)
tree97ae851772c0d0a8ea5d35a96bb0f2678e488708 /src/libcore/send_map.rs
parent10e317de547851bdf714ada4d21b41f5b989d4ed (diff)
libcore: add find_ref/get_ref to SendMap trait
Diffstat (limited to 'src/libcore/send_map.rs')
-rw-r--r--src/libcore/send_map.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libcore/send_map.rs b/src/libcore/send_map.rs
index 7523627ffe3..5e8147c55c7 100644
--- a/src/libcore/send_map.rs
+++ b/src/libcore/send_map.rs
@@ -22,8 +22,8 @@ trait SendMap<K:Eq Hash, V: Copy> {
     fn each_value_ref(&self, blk: fn(v: &V) -> bool);
     fn find(&const self, k: &K) -> Option<V>;
     fn get(&const self, k: &K) -> V;
-    fn with_find_ref<T>(&const self, k: &K, blk: fn(Option<&V>) -> T) -> T;
-    fn with_get_ref<T>(&const self, k: &K, blk: fn(v: &V) -> T) -> T;
+    fn find_ref(&self, k: &K) -> Option<&self/V>;
+    fn get_ref(&self, k: &K) -> &self/V;
 }
 
 /// Open addressing with linear probing.
@@ -304,6 +304,13 @@ mod linear {
             }
         }
 
+        fn get_ref(&self, k: &K) -> &self/V {
+            match self.find_ref(k) {
+                Some(v) => v,
+                None => fail fmt!("No entry found for key: %?", k),
+            }
+        }
+
         fn each_ref(&self, blk: fn(k: &K, v: &V) -> bool) {
             for vec::each(self.buckets) |slot| {
                 let mut broke = false;