diff options
| author | Daniel Micay <danielmicay@gmail.com> | 2013-02-07 19:39:46 -0500 |
|---|---|---|
| committer | Daniel Micay <danielmicay@gmail.com> | 2013-02-07 22:04:38 -0500 |
| commit | a2f922f28264547429ca8abd064623be272c8f3b (patch) | |
| tree | 4f283bc5b98effd491b97cb34bd96779e2fe0fcf | |
| parent | 3e0a28c7da251f14c4339c2714610984ee1001de (diff) | |
implement ReverseIter for TreeMap and TreeSet
| -rw-r--r-- | src/libstd/treemap.rs | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index da83c7b789b..f57f4fd3124 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -14,6 +14,7 @@ use core::container::{Container, Mutable, Map, Set}; use core::cmp::{Eq, Ord}; +use core::iter::{BaseIter, ReverseIter}; use core::option::{Option, Some, None}; use core::prelude::*; @@ -103,7 +104,7 @@ impl <K: Ord, V> TreeMap<K, V>: Ord { } } -impl <K: Ord, V> TreeMap<K, V>: iter::BaseIter<(&K, &V)> { +impl <K: Ord, V> TreeMap<K, V>: BaseIter<(&K, &V)> { /// Visit all key-value pairs in order pure fn each(&self, f: fn(&(&self/K, &self/V)) -> bool) { each(&self.root, f) @@ -111,6 +112,13 @@ impl <K: Ord, V> TreeMap<K, V>: iter::BaseIter<(&K, &V)> { pure fn size_hint(&self) -> Option<uint> { Some(self.len()) } } +impl <K: Ord, V> TreeMap<K, V>: ReverseIter<(&K, &V)> { + /// Visit all key-value pairs in reverse order + pure fn each_reverse(&self, f: fn(&(&self/K, &self/V)) -> bool) { + each_reverse(&self.root, f); + } +} + impl <K: Ord, V> TreeMap<K, V>: Container { /// Return the number of elements in the map pure fn len(&self) -> uint { self.length } @@ -180,11 +188,6 @@ impl <K: Ord, V> TreeMap<K, V> { /// Create an empty TreeMap static pure fn new() -> TreeMap<K, V> { TreeMap{root: None, length: 0} } - /// Visit all key-value pairs in reverse order - pure fn each_reverse(&self, f: fn(&(&self/K, &self/V)) -> bool) { - each_reverse(&self.root, f); - } - /// Visit all keys in reverse order pure fn each_key_reverse(&self, f: fn(&K) -> bool) { self.each_reverse(|&(k, _)| f(k)) @@ -243,12 +246,19 @@ pub struct TreeSet<T> { priv map: TreeMap<T, ()> } -impl <T: Ord> TreeSet<T>: iter::BaseIter<T> { +impl <T: Ord> TreeSet<T>: BaseIter<T> { /// Visit all values in order pure fn each(&self, f: fn(&T) -> bool) { self.map.each_key(f) } pure fn size_hint(&self) -> Option<uint> { Some(self.len()) } } +impl <T: Ord> TreeSet<T>: ReverseIter<T> { + /// Visit all values in reverse order + pure fn each_reverse(&self, f: fn(&T) -> bool) { + self.map.each_key_reverse(f) + } +} + impl <T: Eq Ord> TreeSet<T>: Eq { pure fn eq(&self, other: &TreeSet<T>) -> bool { self.map == other.map } pure fn ne(&self, other: &TreeSet<T>) -> bool { self.map != other.map } @@ -504,11 +514,6 @@ impl <T: Ord> TreeSet<T> { /// Create an empty TreeSet static pure fn new() -> TreeSet<T> { TreeSet{map: TreeMap::new()} } - /// Visit all values in reverse order - pure fn each_reverse(&self, f: fn(&T) -> bool) { - self.map.each_key_reverse(f) - } - /// Get a lazy iterator over the values in the set. /// Requires that it be frozen (immutable). pure fn iter(&self) -> TreeSetIterator/&self<T> { |
