about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-05-18 18:11:27 -0700
committerbors <bors@rust-lang.org>2014-05-18 18:11:27 -0700
commit50b26df59ef848756645157cb6cf17f1e6cff1dc (patch)
tree3f3ac0552309f8300354cd901164089c40079a84
parent86b34bca0fa41380f83ce0ad9312bfa7bedfe770 (diff)
parent4353e44563151325557593ad6b5352cfacfe8d1c (diff)
downloadrust-50b26df59ef848756645157cb6cf17f1e6cff1dc.tar.gz
rust-50b26df59ef848756645157cb6cf17f1e6cff1dc.zip
auto merge of #14122 : dagitses/rust/master, r=alexcrichton
This is my first patch and hopefully nothing controversial: just a straightforward forwarding of TreeMap::move_iter() as TreeSet::move_iter().
-rw-r--r--src/libcollections/treemap.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/libcollections/treemap.rs b/src/libcollections/treemap.rs
index eff20d30906..bb4ca36709c 100644
--- a/src/libcollections/treemap.rs
+++ b/src/libcollections/treemap.rs
@@ -12,6 +12,7 @@
 //! trees. The only requirement for the types is that the key implements
 //! `TotalOrd`.
 
+use std::iter;
 use std::iter::{Peekable};
 use std::cmp::Ordering;
 use std::mem::{replace, swap};
@@ -618,6 +619,12 @@ impl<T: TotalOrd> TreeSet<T> {
         RevSetItems{iter: self.map.rev_iter()}
     }
 
+    /// Get a lazy iterator that consumes the set.
+    #[inline]
+    pub fn move_iter(self) -> MoveSetItems<T> {
+        self.map.move_iter().map(|(value, _)| value)
+    }
+
     /// Get a lazy iterator pointing to the first value not less than `v` (greater or equal).
     /// If all elements in the set are less than `v` empty iterator is returned.
     #[inline]
@@ -665,6 +672,9 @@ pub struct RevSetItems<'a, T> {
     iter: RevEntries<'a, T, ()>
 }
 
+/// Lazy forward iterator over a set that consumes the set while iterating
+pub type MoveSetItems<T> = iter::Map<'static, (T, ()), T, MoveEntries<T, ()>>;
+
 /// Lazy iterator producing elements in the set difference (in-order)
 pub struct DifferenceItems<'a, T> {
     a: Peekable<&'a T, SetItems<'a, T>>,
@@ -1543,6 +1553,33 @@ mod test_set {
     }
 
     #[test]
+    fn test_move_iter() {
+        let s: TreeSet<int> = range(0, 5).collect();
+
+        let mut n = 0;
+        for x in s.move_iter() {
+            assert_eq!(x, n);
+            n += 1;
+        }
+    }
+
+    #[test]
+    fn test_move_iter_size_hint() {
+        let s: TreeSet<int> = vec!(0, 1).move_iter().collect();
+
+        let mut it = s.move_iter();
+
+        assert_eq!(it.size_hint(), (2, Some(2)));
+        assert!(it.next() != None);
+
+        assert_eq!(it.size_hint(), (1, Some(1)));
+        assert!(it.next() != None);
+
+        assert_eq!(it.size_hint(), (0, Some(0)));
+        assert_eq!(it.next(), None);
+    }
+
+    #[test]
     fn test_clone_eq() {
       let mut m = TreeSet::new();