提交 9105cb6d 编写于 作者: N Niko Matsakis

revise map interface so that K need not be copyable

上级 fc9eadf7
......@@ -21,7 +21,7 @@
type hashmap<K, V> = chained::t<K, V>;
iface map<K: copy, V: copy> {
iface map<K, V: copy> {
#[doc = "Return the number of elements in the map"]
fn size() -> uint;
......@@ -33,7 +33,7 @@
Returns true if the key did not already exist in the map
"]
fn insert(K, V) -> bool;
fn insert(+K, +V) -> bool;
#[doc = "Returns true if the map contains a value for the specified key"]
fn contains_key(K) -> bool;
......@@ -96,7 +96,7 @@ enum search_result<K, V> {
found_after(@entry<K,V>, @entry<K,V>)
}
impl private_methods<K: copy, V: copy> for t<K, V> {
impl private_methods<K, V: copy> for t<K, V> {
fn search_rem(k: K, h: uint, idx: uint,
e_root: @entry<K,V>) -> search_result<K,V> {
let mut e0 = e_root;
......@@ -174,7 +174,7 @@ fn each_entry(blk: fn(@entry<K,V>) -> bool) {
}
}
impl hashmap<K: copy, V: copy> of map<K, V> for t<K, V> {
impl hashmap<K, V: copy> of map<K, V> for t<K, V> {
fn size() -> uint { self.count }
fn contains_key(k: K) -> bool {
......@@ -185,7 +185,7 @@ fn contains_key(k: K) -> bool {
}
}
fn insert(k: K, v: V) -> bool {
fn insert(+k: K, +v: V) -> bool {
let hash = self.hasher(k);
alt self.search_tbl(k, hash) {
not_found {
......@@ -249,7 +249,7 @@ fn remove(k: K) -> option<V> {
fn each(blk: fn(K,V) -> bool) {
for self.each_entry { |entry|
if !blk(copy entry.key, copy entry.value) { break; }
if !blk(entry.key, copy entry.value) { break; }
}
}
......
......@@ -62,7 +62,7 @@ fn size() -> uint {
}
sz
}
fn insert(&&key: uint, value: V) -> bool {
fn insert(+key: uint, +value: V) -> bool {
let exists = contains_key(self, key);
insert(self, key, value);
ret !exists;
......
......@@ -36,7 +36,7 @@ fn eat() -> bool {
}
fn size() -> uint { self.meows as uint }
fn insert(&&k: int, &&v: bool) -> bool {
fn insert(+k: int, +v: bool) -> bool {
if v { self.meows += k; } else { self.meows -= k; };
true
}
......
......@@ -41,7 +41,7 @@ fn eat() -> bool {
}
fn size() -> uint { self.meows as uint }
fn insert(&&k: int, &&_v: T) -> bool {
fn insert(+k: int, +_v: T) -> bool {
self.meows += k;
true
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册