@@ -1302,7 +1302,10 @@ impl<T> RingBuf<T> {
13021302 /// Panics if `at > len`
13031303 ///
13041304 /// # Examples
1305- /// ```rust
1305+ ///
1306+ /// ```
1307+ /// use std::collections::RingBuf;
1308+ ///
13061309 /// let mut buf: RingBuf<_> = vec![1,2,3].into_iter().collect();
13071310 /// let buf2 = buf.split_off(1);
13081311 /// // buf = [1], buf2 = [2, 3]
@@ -1353,6 +1356,31 @@ impl<T> RingBuf<T> {
13531356
13541357 other
13551358 }
1359+
1360+ /// Moves all the elements of `other` into `Self`, leaving `other` empty.
1361+ ///
1362+ /// # Panics
1363+ ///
1364+ /// Panics if the new number of elements in self overflows a `usize`.
1365+ ///
1366+ /// # Examples
1367+ ///
1368+ /// ```
1369+ /// use std::collections::RingBuf;
1370+ ///
1371+ /// let mut buf: RingBuf<_> = vec![1, 2, 3].into_iter().collect();
1372+ /// let mut buf2: RingBuf<_> = vec![4, 5, 6].into_iter().collect();
1373+ /// buf.append(&mut buf2);
1374+ /// assert_eq!(buf.len(), 6);
1375+ /// assert_eq!(buf2.len(), 0);
1376+ /// ```
1377+ #[ inline]
1378+ #[ unstable( feature = "collections" ,
1379+ reason = "new API, waiting for dust to settle" ) ]
1380+ pub fn append ( & mut self , other : & mut Self ) {
1381+ // naive impl
1382+ self . extend ( other. drain ( ) ) ;
1383+ }
13561384}
13571385
13581386impl < T : Clone > RingBuf < T > {
@@ -2813,4 +2841,25 @@ mod tests {
28132841 }
28142842 }
28152843 }
2844+
2845+ #[ test]
2846+ fn test_append ( ) {
2847+ let mut a: RingBuf < _ > = vec ! [ 1 , 2 , 3 ] . into_iter ( ) . collect ( ) ;
2848+ let mut b: RingBuf < _ > = vec ! [ 4 , 5 , 6 ] . into_iter ( ) . collect ( ) ;
2849+
2850+ // normal append
2851+ a. append ( & mut b) ;
2852+ assert_eq ! ( a. iter( ) . cloned( ) . collect( ) , vec![ 1 , 2 , 3 , 4 , 5 , 6 ] ) ;
2853+ assert_eq ! ( b. iter( ) . cloned( ) . collect( ) , vec![ ] ) ;
2854+
2855+ // append nothing to something
2856+ a. append ( & mut b) ;
2857+ assert_eq ! ( a. iter( ) . cloned( ) . collect( ) , vec![ 1 , 2 , 3 , 4 , 5 , 6 ] ) ;
2858+ assert_eq ! ( b. iter( ) . cloned( ) . collect( ) , vec![ ] ) ;
2859+
2860+ // append something to nothing
2861+ b. append ( & mut a) ;
2862+ assert_eq ! ( b. iter( ) . cloned( ) . collect( ) , vec![ 1 , 2 , 3 , 4 , 5 , 6 ] ) ;
2863+ assert_eq ! ( a. iter( ) . cloned( ) . collect( ) , vec![ ] ) ;
2864+ }
28162865}
0 commit comments