From 4ebbbe597e44dbed0da3027fbf4e564390e0daeb Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 21 Oct 2011 12:21:27 +0200 Subject: Move hash table iteration over to block-taking functions Issue #1056 --- src/lib/map.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'src/lib') diff --git a/src/lib/map.rs b/src/lib/map.rs index 3445f4b6c82..ef5e8acae46 100644 --- a/src/lib/map.rs +++ b/src/lib/map.rs @@ -14,8 +14,9 @@ type hashmap = fn find(K) -> option::t; fn remove(K) -> option::t; fn rehash(); - iter items() -> @{key: K, val: V}; - iter keys() -> K; + fn items(block(K, V)); + fn keys(block(K)); + fn values(block(V)); }; type hashset = hashmap; @@ -111,8 +112,7 @@ fn mk_hashmap<@K, @V>(hasher: hashfn, eqer: eqfn) -> hashmap { } } } - obj hashmap<@K, - @V>(hasher: hashfn, + obj hashmap<@K, @V>(hasher: hashfn, eqer: eqfn, mutable bkts: [mutable bucket], mutable nbkts: uint, @@ -177,14 +177,19 @@ fn mk_hashmap<@K, @V>(hasher: hashfn, eqer: eqfn) -> hashmap { rehash(hasher, eqer, bkts, nbkts, newbkts, nbkts); bkts = newbkts; } - iter items() -> @{key: K, val: V} { - for b: bucket in bkts { - alt b { some(k, v) { put @{key: k, val: v}; } _ { } } + fn items(it: block(K, V)) { + for b in bkts { + alt b { some(k, v) { it(copy k, copy v); } _ { } } } } - iter keys() -> K { - for b: bucket in bkts { - alt b { some(k, _) { put k; } _ { } } + fn keys(it: block(K)) { + for b in bkts { + alt b { some(k, _) { it(copy k); } _ { } } + } + } + fn values(it: block(V)) { + for b in bkts { + alt b { some(_, v) { it(copy v); } _ { } } } } } -- cgit 1.4.1-3-g733a5