about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-02-07 20:20:39 -0500
committerDaniel Micay <danielmicay@gmail.com>2013-02-07 22:04:38 -0500
commitfe841f3e56291f2b1521fb124fcf9277b931c53f (patch)
tree93c94ea56c33048d23ba8a84a20046fe1ad4ac17 /src/libstd
parenta2f922f28264547429ca8abd064623be272c8f3b (diff)
downloadrust-fe841f3e56291f2b1521fb124fcf9277b931c53f.tar.gz
rust-fe841f3e56291f2b1521fb124fcf9277b931c53f.zip
implement ReverseIter for SmallIntMap
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/smallintmap.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs
index 9789dbea131..9642dd0c3dd 100644
--- a/src/libstd/smallintmap.rs
+++ b/src/libstd/smallintmap.rs
@@ -14,7 +14,7 @@
  */
 
 use core::container::{Container, Mutable, Map, Set};
-use core::iter::BaseIter;
+use core::iter::{BaseIter, ReverseIter};
 use core::option::{Some, None};
 use core::prelude::*;
 
@@ -36,6 +36,18 @@ impl<V> SmallIntMap<V>: BaseIter<(uint, &V)> {
     pure fn size_hint(&self) -> Option<uint> { Some(self.len()) }
 }
 
+impl<V> SmallIntMap<V>: ReverseIter<(uint, &V)> {
+    /// Visit all key-value pairs in reverse order
+    pure fn each_reverse(&self, it: fn(&(uint, &self/V)) -> bool) {
+        for uint::range_rev(self.v.len(), 0) |i| {
+            match self.v[i - 1] {
+              Some(ref elt) => if !it(&(i - 1, elt)) { break },
+              None => ()
+            }
+        }
+    }
+}
+
 impl<V> SmallIntMap<V>: Container {
     /// Return the number of elements in the map
     pure fn len(&self) -> uint {