Skip to content

Commit fcb30c3

Browse files
Daniel Pattersoncatamorphism
authored andcommitted
---
yaml --- r: 38644 b: refs/heads/incoming c: fd6be2f h: refs/heads/master v: v3
1 parent 612364c commit fcb30c3

File tree

2 files changed

+47
-11
lines changed

2 files changed

+47
-11
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: 3d5418789064fdb463e872a4e651af1c628a3650
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: a810c03263670238bccd64cabb12a23a46e3a278
9-
refs/heads/incoming: f2544d8d80f20e9c1e39c3c455b18ebe1922d1d5
9+
refs/heads/incoming: fd6be2fa4eac4638174a484529ef782007d0fec1
1010
refs/heads/dist-snap: 22efa39382d41b084fde1719df7ae8ce5697d8c9
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/incoming/src/libstd/treemap.rs

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,28 @@ use core::cmp::{Eq, Ord};
1111
use core::option::{Some, None};
1212
use Option = core::Option;
1313

14-
pub type TreeMap<K, V> = @mut TreeEdge<K, V>;
14+
pub type TreeMap<K: Copy Eq Ord, V: Copy> = @mut TreeEdge<K, V>;
1515

16-
type TreeEdge<K, V> = Option<@TreeNode<K, V>>;
16+
type TreeEdge<K: Copy Eq Ord, V: Copy> = Option<@TreeNode<K, V>>;
1717

18-
enum TreeNode<K, V> = {
18+
struct TreeNode<K: Copy Eq Ord, V: Copy> {
1919
key: K,
2020
mut value: V,
2121
mut left: TreeEdge<K, V>,
2222
mut right: TreeEdge<K, V>
23-
};
23+
}
2424

2525
/// Create a treemap
26-
pub fn TreeMap<K, V>() -> TreeMap<K, V> { @mut None }
26+
pub fn TreeMap<K: Copy Eq Ord, V: Copy>() -> TreeMap<K, V> { @mut None }
2727

2828
/// Insert a value into the map
2929
pub fn insert<K: Copy Eq Ord, V: Copy>(m: &mut TreeEdge<K, V>, k: K, v: V) {
3030
match copy *m {
3131
None => {
32-
*m = Some(@TreeNode({key: k,
33-
mut value: v,
34-
mut left: None,
35-
mut right: None}));
32+
*m = Some(@TreeNode {key: k,
33+
mut value: v,
34+
mut left: None,
35+
mut right: None});
3636
return;
3737
}
3838
Some(node) => {
@@ -67,7 +67,8 @@ pub fn find<K: Copy Eq Ord, V: Copy>(m: &const TreeEdge<K, V>, k: K)
6767
}
6868

6969
/// Visit all pairs in the map in order.
70-
pub fn traverse<K, V: Copy>(m: &const TreeEdge<K, V>, f: fn((&K), (&V))) {
70+
pub fn traverse<K: Copy Eq Ord, V: Copy>(m: &const TreeEdge<K, V>,
71+
f: fn((&K), (&V))) {
7172
match copy *m {
7273
None => (),
7374
Some(node) => {
@@ -79,6 +80,19 @@ pub fn traverse<K, V: Copy>(m: &const TreeEdge<K, V>, f: fn((&K), (&V))) {
7980
}
8081
}
8182

83+
/// Compare two treemaps and return true iff
84+
/// they contain same keys and values
85+
pub fn equals<K: Copy Eq Ord, V: Copy Eq>(t1: &const TreeEdge<K, V>,
86+
t2: &const TreeEdge<K, V>)
87+
-> bool {
88+
let mut v1 = ~[];
89+
let mut v2 = ~[];
90+
traverse(t1, |k,v| { v1.push((copy *k, copy *v)) });
91+
traverse(t2, |k,v| { v2.push((copy *k, copy *v)) });
92+
return v1 == v2;
93+
}
94+
95+
8296
#[cfg(test)]
8397
mod tests {
8498
#[legacy_exports];
@@ -127,6 +141,28 @@ mod tests {
127141
traverse(m, |x,y| t(n, *x, *y));
128142
}
129143

144+
#[test]
145+
fn equality() {
146+
let m1 = TreeMap();
147+
insert(m1, 3, ());
148+
insert(m1, 0, ());
149+
insert(m1, 4, ());
150+
insert(m1, 2, ());
151+
insert(m1, 1, ());
152+
let m2 = TreeMap();
153+
insert(m2, 2, ());
154+
insert(m2, 1, ());
155+
insert(m2, 3, ());
156+
insert(m2, 0, ());
157+
insert(m2, 4, ());
158+
159+
assert equals(m1, m2);
160+
161+
let m3 = TreeMap();
162+
assert !equals(m1,m3);
163+
164+
}
165+
130166
#[test]
131167
fn u8_map() {
132168
let m = TreeMap();

0 commit comments

Comments
 (0)