提交 aa232a52 编写于 作者: B Brian Anderson

Merge pull request #2846 from gwillen/1c882842

Add map::clear
......@@ -60,6 +60,9 @@
*/
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 @@
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 @@ fn remove(k: K) -> option<V> {
}
}
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 @@ fn chains<K,V>(nchains: uint) -> ~[mut chain<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,
mut chains: chains(initial_capacity),
hasher: hasher,
......@@ -609,6 +618,18 @@ fn test_find() {
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]
fn test_hash_from_vec() {
let map = map::hash_from_strs(~[
......
......@@ -73,6 +73,9 @@ fn remove(&&key: uint) -> option<V> {
self.v.set_elt(key, none);
old
}
fn clear() {
self.v.set(~[mut]);
}
fn contains_key(&&key: uint) -> bool {
contains_key(self, key)
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册