diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2011-10-21 12:21:27 +0200 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2011-10-21 12:21:27 +0200 |
| commit | 4ebbbe597e44dbed0da3027fbf4e564390e0daeb (patch) | |
| tree | 688153be857cd96a9ea940b0d697b25f1f71d384 /src/lib | |
| parent | 9bb4595c534ffcd0731ed778beb62bb80d7f9217 (diff) | |
| download | rust-4ebbbe597e44dbed0da3027fbf4e564390e0daeb.tar.gz rust-4ebbbe597e44dbed0da3027fbf4e564390e0daeb.zip | |
Move hash table iteration over to block-taking functions
Issue #1056
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/map.rs | 25 |
1 files changed, 15 insertions, 10 deletions
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<K, V> = fn find(K) -> option::t<V>; fn remove(K) -> option::t<V>; 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<K> = hashmap<K, ()>; @@ -111,8 +112,7 @@ fn mk_hashmap<@K, @V>(hasher: hashfn<K>, eqer: eqfn<K>) -> hashmap<K, V> { } } } - obj hashmap<@K, - @V>(hasher: hashfn<K>, + obj hashmap<@K, @V>(hasher: hashfn<K>, eqer: eqfn<K>, mutable bkts: [mutable bucket<K, V>], mutable nbkts: uint, @@ -177,14 +177,19 @@ fn mk_hashmap<@K, @V>(hasher: hashfn<K>, eqer: eqfn<K>) -> hashmap<K, V> { rehash(hasher, eqer, bkts, nbkts, newbkts, nbkts); bkts = newbkts; } - iter items() -> @{key: K, val: V} { - for b: bucket<K, V> 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<K, V> 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); } _ { } } } } } |
