]> git.lizzy.rs Git - rust.git/commitdiff
MutableIter impl for Option + use it in treemap
authorDaniel Micay <danielmicay@gmail.com>
Fri, 15 Mar 2013 03:16:15 +0000 (23:16 -0400)
committerDaniel Micay <danielmicay@gmail.com>
Fri, 15 Mar 2013 03:44:25 +0000 (23:44 -0400)
src/libcore/option.rs
src/libstd/treemap.rs

index 64135b3b8e156fa2b9c7f20db83cc9913ff2540e..1e3bba64f2747c1706ca18fbe2207233a2a6f98e 100644 (file)
@@ -46,7 +46,7 @@
 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)]
index 8d4ff9941950a9ffc2dee562267b928c9d84a31f..e0c60c72ca76af164a4adbb9591e9dc8808698cb 100644 (file)
@@ -72,7 +72,7 @@ impl<K: Eq + TotalOrd, V: Eq> Eq for 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 heir_swap<K: TotalOrd, V>(node: &mut ~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 heir_swap<K: TotalOrd, V>(node: &mut ~TreeNode<K, V>,
     }
 
     *node = None;
-    return true;
+    true
 }
 
 #[cfg(test)]