Merge pull request #2846 from gwillen/1c882842e06431767676887f97f9dcc0ee50a7b9
Add map::clear
This commit is contained in:
commit
aa232a5269
2 changed files with 25 additions and 1 deletions
|
@ -60,6 +60,9 @@ iface map<K, V: copy> {
|
||||||
*/
|
*/
|
||||||
fn remove(K) -> option<V>;
|
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
|
/// Iterate over all the key/value pairs in the map
|
||||||
fn each(fn(K, V) -> bool);
|
fn each(fn(K, V) -> bool);
|
||||||
|
|
||||||
|
@ -75,6 +78,8 @@ iface map<K, V: copy> {
|
||||||
mod chained {
|
mod chained {
|
||||||
export t, mk, hashmap;
|
export t, mk, hashmap;
|
||||||
|
|
||||||
|
const initial_capacity: uint = 32u; // 2^5
|
||||||
|
|
||||||
type entry<K, V> = {
|
type entry<K, V> = {
|
||||||
hash: uint,
|
hash: uint,
|
||||||
key: K,
|
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) {
|
fn each(blk: fn(K,V) -> bool) {
|
||||||
for self.each_entry |entry| {
|
for self.each_entry |entry| {
|
||||||
if !blk(entry.key, copy entry.value) { break; }
|
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> {
|
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,
|
let slf: t<K, V> = @{mut count: 0u,
|
||||||
mut chains: chains(initial_capacity),
|
mut chains: chains(initial_capacity),
|
||||||
hasher: hasher,
|
hasher: hasher,
|
||||||
|
@ -609,6 +618,18 @@ mod tests {
|
||||||
assert (option::get(map.find(key)) == "val");
|
assert (option::get(map.find(key)) == "val");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[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]
|
#[test]
|
||||||
fn test_hash_from_vec() {
|
fn test_hash_from_vec() {
|
||||||
let map = map::hash_from_strs(~[
|
let map = map::hash_from_strs(~[
|
||||||
|
|
|
@ -73,6 +73,9 @@ impl <V: copy> of map::map<uint, V> for smallintmap<V> {
|
||||||
self.v.set_elt(key, none);
|
self.v.set_elt(key, none);
|
||||||
old
|
old
|
||||||
}
|
}
|
||||||
|
fn clear() {
|
||||||
|
self.v.set(~[mut]);
|
||||||
|
}
|
||||||
fn contains_key(&&key: uint) -> bool {
|
fn contains_key(&&key: uint) -> bool {
|
||||||
contains_key(self, key)
|
contains_key(self, key)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue