aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 1ad83957..9ebfd4b6 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 =