]> git.lizzy.rs Git - rust.git/commitdiff
naive RingBuf::append impl
authorAlexis <a.beingessner@gmail.com>
Sat, 7 Feb 2015 17:13:32 +0000 (12:13 -0500)
committerAlexis <a.beingessner@gmail.com>
Sun, 15 Feb 2015 00:30:33 +0000 (19:30 -0500)
src/libcollections/ring_buf.rs

index 9d7c0ca3d9921c85be741eb97d5e879fbd3b84c4..c2b5f3fb15850c6a639db10be9823e87d63e1450 100644 (file)
@@ -1302,7 +1302,10 @@ pub fn remove(&mut self, i: usize) -> Option<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 @@ pub fn split_off(&mut self, at: usize) -> Self {
 
         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 @@ fn test_split_off() {
             }
         }
     }
+
+    #[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![]);
+    }
 }