about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlexis <a.beingessner@gmail.com>2015-02-07 12:13:32 -0500
committerAlexis <a.beingessner@gmail.com>2015-02-14 19:30:33 -0500
commit3c18bc42722c137656caeea2cc6dd1047501f098 (patch)
tree2788331d73da8e19cbc0e1cd44ba08640534d840 /src
parentdc930b1a52730cc21d22185820a5cafed5801ecf (diff)
downloadrust-3c18bc42722c137656caeea2cc6dd1047501f098.tar.gz
rust-3c18bc42722c137656caeea2cc6dd1047501f098.zip
naive RingBuf::append impl
Diffstat (limited to 'src')
-rw-r--r--src/libcollections/ring_buf.rs51
1 files changed, 50 insertions, 1 deletions
diff --git a/src/libcollections/ring_buf.rs b/src/libcollections/ring_buf.rs
index 9d7c0ca3d99..c2b5f3fb158 100644
--- a/src/libcollections/ring_buf.rs
+++ b/src/libcollections/ring_buf.rs
@@ -1302,7 +1302,10 @@ impl<T> RingBuf<T> {
     /// Panics if `at > len`
     ///
     /// # Examples
-    /// ```rust
+    ///
+    /// ```
+    /// use std::collections::RingBuf;
+    ///
     /// let mut buf: RingBuf<_> = vec![1,2,3].into_iter().collect();
     /// let buf2 = buf.split_off(1);
     /// // buf = [1], buf2 = [2, 3]
@@ -1353,6 +1356,31 @@ impl<T> RingBuf<T> {
 
         other
     }
+
+    /// Moves all the elements of `other` into `Self`, leaving `other` empty.
+    ///
+    /// # Panics
+    ///
+    /// Panics if the new number of elements in self overflows a `usize`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use std::collections::RingBuf;
+    ///
+    /// let mut buf: RingBuf<_> = vec![1, 2, 3].into_iter().collect();
+    /// let mut buf2: RingBuf<_> = vec![4, 5, 6].into_iter().collect();
+    /// buf.append(&mut buf2);
+    /// assert_eq!(buf.len(), 6);
+    /// assert_eq!(buf2.len(), 0);
+    /// ```
+    #[inline]
+    #[unstable(feature = "collections",
+               reason = "new API, waiting for dust to settle")]
+    pub fn append(&mut self, other: &mut Self) {
+        // naive impl
+        self.extend(other.drain());
+    }
 }
 
 impl<T: Clone> RingBuf<T> {
@@ -2813,4 +2841,25 @@ mod tests {
             }
         }
     }
+
+    #[test]
+    fn test_append() {
+        let mut a: RingBuf<_> = vec![1, 2, 3].into_iter().collect();
+        let mut b: RingBuf<_> = vec![4, 5, 6].into_iter().collect();
+
+        // normal append
+        a.append(&mut b);
+        assert_eq!(a.iter().cloned().collect(), vec![1, 2, 3, 4, 5, 6]);
+        assert_eq!(b.iter().cloned().collect(), vec![]);
+
+        // append nothing to something
+        a.append(&mut b);
+        assert_eq!(a.iter().cloned().collect(), vec![1, 2, 3, 4, 5, 6]);
+        assert_eq!(b.iter().cloned().collect(), vec![]);
+
+        // append something to nothing
+        b.append(&mut a);
+        assert_eq!(b.iter().cloned().collect(), vec![1, 2, 3, 4, 5, 6]);
+        assert_eq!(a.iter().cloned().collect(), vec![]);
+    }
 }