diff options
| author | Brian Anderson <andersrb@gmail.com> | 2012-07-09 13:26:48 -0700 |
|---|---|---|
| committer | Brian Anderson <andersrb@gmail.com> | 2012-07-09 13:26:48 -0700 |
| commit | aa232a52695f56714d9c6c92b6ab48e4acfb0d70 (patch) | |
| tree | 46b7728a3c64f21abc743dd8ff2ffe1ad41e7b58 /src/libstd | |
| parent | a7f6e009446c3f0810b26bf9e3c91aefa08bd240 (diff) | |
| parent | 1c882842e06431767676887f97f9dcc0ee50a7b9 (diff) | |
Merge pull request #2846 from gwillen/1c882842e06431767676887f97f9dcc0ee50a7b9
Add map::clear
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/map.rs | 23 | ||||
| -rw-r--r-- | src/libstd/smallintmap.rs | 3 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/libstd/map.rs b/src/libstd/map.rs index 46f2ca053ad..8a2089c6f2b 100644 --- a/src/libstd/map.rs +++ b/src/libstd/map.rs @@ -60,6 +60,9 @@ iface map<K, V: copy> { */ fn remove(K) -> option<V>; + /// Clear the map, removing all key/value pairs. + fn clear(); + /// Iterate over all the key/value pairs in the map fn each(fn(K, V) -> bool); @@ -75,6 +78,8 @@ iface map<K, V: copy> { mod chained { export t, mk, hashmap; + const initial_capacity: uint = 32u; // 2^5 + type entry<K, V> = { hash: uint, key: K, @@ -255,6 +260,11 @@ mod chained { } } + fn clear() { + self.count = 0u; + self.chains = chains(initial_capacity); + } + fn each(blk: fn(K,V) -> bool) { for self.each_entry |entry| { if !blk(entry.key, copy entry.value) { break; } @@ -271,7 +281,6 @@ mod chained { } fn mk<K, V: copy>(hasher: hashfn<K>, eqer: eqfn<K>) -> t<K,V> { - let initial_capacity: uint = 32u; // 2^5 let slf: t<K, V> = @{mut count: 0u, mut chains: chains(initial_capacity), hasher: hasher, @@ -610,6 +619,18 @@ mod tests { } #[test] + fn test_clear() { + let key = "k"; + let map = map::hashmap::<str, str>(str::hash, str::eq); + map.insert(key, "val"); + assert (map.size() == 1); + assert (map.contains_key(key)); + map.clear(); + assert (map.size() == 0); + assert (!map.contains_key(key)); + } + + #[test] fn test_hash_from_vec() { let map = map::hash_from_strs(~[ ("a", 1), diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs index 9fb4be4804d..1d17ba0dbb4 100644 --- a/src/libstd/smallintmap.rs +++ b/src/libstd/smallintmap.rs @@ -73,6 +73,9 @@ impl <V: copy> of map::map<uint, V> for smallintmap<V> { self.v.set_elt(key, none); old } + fn clear() { + self.v.set(~[mut]); + } fn contains_key(&&key: uint) -> bool { contains_key(self, key) } |
