about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-03-14 23:16:15 -0400
committerDaniel Micay <danielmicay@gmail.com>2013-03-14 23:44:25 -0400
commita49ccee68efc7ec05e882e5929669108f65f74fa (patch)
treea860b1e2dcc9a305930c111472f970c17752b3a5
parentc3fe0b97de67e0449aa20cd8ef683fb594bb3ffd (diff)
downloadrust-a49ccee68efc7ec05e882e5929669108f65f74fa.tar.gz
rust-a49ccee68efc7ec05e882e5929669108f65f74fa.zip
MutableIter impl for Option + use it in treemap
-rw-r--r--src/libcore/option.rs9
-rw-r--r--src/libstd/treemap.rs19
2 files changed, 13 insertions, 15 deletions
diff --git a/src/libcore/option.rs b/src/libcore/option.rs
index 64135b3b8e1..1e3bba64f27 100644
--- a/src/libcore/option.rs
+++ b/src/libcore/option.rs
@@ -46,7 +46,7 @@ use ops::Add;
 use kinds::Copy;
 use util;
 use num::Zero;
-use iter::BaseIter;
+use iter::{BaseIter, MutableIter};
 
 #[cfg(test)] use ptr;
 #[cfg(test)] use str;
@@ -323,6 +323,13 @@ impl<T> BaseIter<T> for Option<T> {
     }
 }
 
+impl<T> MutableIter<T> for Option<T> {
+    #[inline(always)]
+    fn each_mut(&mut self, f: &fn(&'self mut T) -> bool) {
+        match *self { None => (), Some(ref mut t) => { f(t); } }
+    }
+}
+
 pub impl<T> Option<T> {
     /// Returns true if the option equals `none`
     #[inline(always)]
diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs
index 8d4ff994195..e0c60c72ca7 100644
--- a/src/libstd/treemap.rs
+++ b/src/libstd/treemap.rs
@@ -72,7 +72,7 @@ pure fn lt<K: Ord + TotalOrd, V>(a: &TreeMap<K, V>,
         }
     };
 
-    return a_len < b_len;
+    a_len < b_len
 }
 
 impl<K: Ord + TotalOrd, V> Ord for TreeMap<K, V> {
@@ -694,22 +694,13 @@ fn remove<K: TotalOrd, V>(node: &mut Option<~TreeNode<K, V>>,
 
                 skew(save);
 
-                match save.right {
-                  Some(ref mut right) => {
+                for save.right.each_mut |right| {
                     skew(right);
-                    match right.right {
-                      Some(ref mut x) => { skew(x) },
-                      None => ()
-                    }
-                  }
-                  None => ()
+                    for right.right.each_mut |x| { skew(x) }
                 }
 
                 split(save);
-                match save.right {
-                  Some(ref mut x) => { split(x) },
-                  None => ()
-                }
+                for save.right.each_mut |x| { split(x) }
             }
 
             return removed;
@@ -718,7 +709,7 @@ fn remove<K: TotalOrd, V>(node: &mut Option<~TreeNode<K, V>>,
     }
 
     *node = None;
-    return true;
+    true
 }
 
 #[cfg(test)]