about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2010-09-22 17:04:08 -0700
committerGraydon Hoare <graydon@mozilla.com>2010-09-22 17:04:08 -0700
commit4d172833710f580c777cb5c1938a8991cc38cd08 (patch)
tree73efda613f039b25bf0bd0d8cd9cf0b4a168b456 /src
parent2880ecd73ff7443ad72eb7af3c85e673024fc7fd (diff)
downloadrust-4d172833710f580c777cb5c1938a8991cc38cd08.tar.gz
rust-4d172833710f580c777cb5c1938a8991cc38cd08.zip
Add 'items' iter to hashmap.
Diffstat (limited to 'src')
-rw-r--r--src/lib/map.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/lib/map.rs b/src/lib/map.rs
index 1ad83957015..9ebfd4b6852 100644
--- a/src/lib/map.rs
+++ b/src/lib/map.rs
@@ -20,6 +20,7 @@ type hashmap[K, V] = obj {
                      fn find(&K key) -> util.option[V];
                      fn remove(&K key) -> util.option[V];
                      fn rehash();
+                     iter items() -> tup(K,V);
 };
 
 fn mk_hashmap[K, V](&hashfn[K] hasher, &eqfn[K] eqer) -> hashmap[K, V] {
@@ -216,6 +217,17 @@ fn mk_hashmap[K, V](&hashfn[K] hasher, &eqfn[K] eqer) -> hashmap[K, V] {
                 rehash[K, V](hasher, eqer, bkts, nbkts, newbkts, nbkts);
                 bkts = newbkts;
             }
+
+            iter items() -> tup(K,V) {
+                for (bucket[K,V] b in bkts) {
+                    alt (b) {
+                        case(some[K,V](?k,?v)) {
+                            put tup(k,v);
+                        }
+                        case (_) { }
+                    }
+                }
+            }
         }
 
     let vec[mutable bucket[K, V]] bkts =