stdlib: Added a treemap traversal function.

This commit is contained in:
Eric Holk 2011-08-26 10:50:02 -07:00
parent cd913b454d
commit 2fab948e01
2 changed files with 40 additions and 0 deletions

View file

@ -15,6 +15,7 @@ export treemap;
export init;
export insert;
export find;
export traverse;
tag tree_node<@K, @V> {
empty;
@ -74,3 +75,25 @@ fn find<@K, @V>(m : &treemap<K, V>, k : &K) -> option<V> {
}
}
}
// Performs an in-order traversal
fn traverse<@K, @V>(m : &treemap<K, V>, f : fn(&K, &V)) {
alt *m {
empty. { }
node(@k, @v, _, _) {
// copy v to make aliases work out
let v1 = v;
alt *m {
node(_, _, left, _) {
traverse(left, f);
}
}
f(k, v1);
alt *m {
node(_, _, _, right) {
traverse(right, f);
}
}
}
}
}