Skip to content

Commit a5c4869

Browse files
committed
---
yaml --- r: 20763 b: refs/heads/snap-stage3 c: ea568f3 h: refs/heads/master i: 20761: e9f0b34 20759: 7181113 v: v3
1 parent 34c32bc commit a5c4869

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: e430a699f2c60890d9b86069fd0c68a70ece7120
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: 0bd6371155d187ce8d8ad5c0a45ea344804f6813
4+
refs/heads/snap-stage3: ea568f38ff97520e3631495371223a0dd9f58299
55
refs/heads/try: ffbe0e0e00374358b789b0037bcb3a577cd218be
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/src/libcore/send_map.rs

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ mod linear {
289289
}
290290
*/
291291

292-
fn each(blk: fn(k: &K, v: &V) -> bool) {
292+
fn each_ref(blk: fn(k: &K, v: &V) -> bool) {
293293
for vec::each(self.buckets) |slot| {
294294
let mut broke = false;
295295
do slot.iter |bucket| {
@@ -300,11 +300,27 @@ mod linear {
300300
if broke { break; }
301301
}
302302
}
303-
fn each_key(blk: fn(k: &K) -> bool) {
304-
self.each(|k, _v| blk(k))
303+
fn each_key_ref(blk: fn(k: &K) -> bool) {
304+
self.each_ref(|k, _v| blk(k))
305305
}
306-
fn each_value(blk: fn(v: &V) -> bool) {
307-
self.each(|_k, v| blk(v))
306+
fn each_value_ref(blk: fn(v: &V) -> bool) {
307+
self.each_ref(|_k, v| blk(v))
308+
}
309+
}
310+
311+
impl public_methods<K: copy, V: copy> for &linear_map<K,V> {
312+
fn each(blk: fn(+K,+V) -> bool) {
313+
self.each_ref(|k,v| blk(copy *k, copy *v));
314+
}
315+
}
316+
impl public_methods<K: copy, V> for &linear_map<K,V> {
317+
fn each_key(blk: fn(+K) -> bool) {
318+
self.each_key_ref(|k| blk(copy *k));
319+
}
320+
}
321+
impl public_methods<K, V: copy> for &linear_map<K,V> {
322+
fn each_value(blk: fn(+V) -> bool) {
323+
self.each_value_ref(|v| blk(copy *v));
308324
}
309325
}
310326
}
@@ -360,4 +376,18 @@ mod test {
360376
assert m.get(&9) == 4;
361377
assert m.get(&5) == 3;
362378
}
379+
380+
#[test]
381+
fn iterate() {
382+
let mut m = linear::linear_map_with_capacity(uint_hash, uint_eq, 4);
383+
for uint::range(0, 32) |i| {
384+
assert (&mut m).insert(i, i*2);
385+
}
386+
let mut observed = 0;
387+
for (&m).each |k, v| {
388+
assert v == k*2;
389+
observed |= (1 << k);
390+
}
391+
assert observed == 0xFFFF_FFFF;
392+
}
363393
}

0 commit comments

Comments
 (0)