about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-02-07 19:39:46 -0500
committerDaniel Micay <danielmicay@gmail.com>2013-02-07 22:04:38 -0500
commita2f922f28264547429ca8abd064623be272c8f3b (patch)
tree4f283bc5b98effd491b97cb34bd96779e2fe0fcf
parent3e0a28c7da251f14c4339c2714610984ee1001de (diff)
implement ReverseIter for TreeMap and TreeSet
-rw-r--r--src/libstd/treemap.rs29
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> {