Is it important for `traverse` to pass along an option type? Is it
important to inform end users that a key has been deleted? Or is that
implementation specific? If so, I suggest rewriting `traverse` to something
like this (assuming this actually works):
impl<K, V> RBMap<K, V>: iter::BaseIter<(&K, &V)> {
pure fn each(f: fn(&(&K, &V))) {
match *self {
Leaf => (),
Tree(_, left, ref key, maybe_value, right) => {
left.traverse(f);
match maybe_value {
Some(ref value) => f(&(key, value)),
None => {},
}
right.traverse(f);
}
}
}
}
On Mon, Dec 17, 2012 at 11:46 AM, Graydon Hoare <[email protected]> wrote:
> On 12-12-17 11:28 AM, Graydon Hoare wrote:
> > On 12-12-14 03:51 PM, Steve Jenson wrote:
> >> I recently ported Matt Might's Scala port of Okasaki's purely functional
> >> red-black tree to Rust and am looking for some feedback.
> >>
> >> https://github.com/stevej/rustled/blob/master/red_black_tree.rs
> >>
> >> I've written this for 0.4 and will update it with other feedback I've
> >> received for 0.5 when that lands.
> >
> > Nice! The only things I'd ask are:
> >
> > - I can't tell at a glance (sorry, RB-trees are always very subtle)
> > whether this is an LLRB. If not, could you make it so? It's likely
> > just a simplification to a couple of the functions.
>
> Er, except of course, there's also:
>
> https://github.com/fawek/llrbt.rs
>
> I think we need some better coordination of library development :)
>
> -Graydon
>
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
>
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev