@@ -1353,6 +1353,29 @@ impl<T> RingBuf<T> {
1353
1353
1354
1354
other
1355
1355
}
1356
+
1357
+ /// Moves all the elements of `other` into `Self`, leaving `other` empty.
1358
+ ///
1359
+ /// # Panics
1360
+ ///
1361
+ /// Panics if the new number of elements in self overflows a `usize`.
1362
+ ///
1363
+ /// # Examples
1364
+ ///
1365
+ /// ```
1366
+ /// let mut buf: RingBuf<_> = vec![1, 2, 3].into_iter().collect();
1367
+ /// let mut buf2: RingBuf<_> = vec![4, 5, 6].into_iter().collect();
1368
+ /// buf.append(&mut buf2);
1369
+ /// assert_eq!(buf.len(), 6);
1370
+ /// assert_eq!(buf2.len(), 0);
1371
+ /// ```
1372
+ #[ inline]
1373
+ #[ unstable( feature = "collections" ,
1374
+ reason = "new API, waiting for dust to settle" ) ]
1375
+ pub fn append ( & mut self , other : & mut Self ) {
1376
+ // naive impl
1377
+ self . extend ( other. drain ( ) ) ;
1378
+ }
1356
1379
}
1357
1380
1358
1381
impl < T : Clone > RingBuf < T > {
@@ -2813,4 +2836,25 @@ mod tests {
2813
2836
}
2814
2837
}
2815
2838
}
2839
+
2840
+ #[ test]
2841
+ fn test_append ( ) {
2842
+ let mut a: RingBuf < _ > = vec ! [ 1 , 2 , 3 ] . into_iter ( ) . collect ( ) ;
2843
+ let mut b: RingBuf < _ > = vec ! [ 4 , 5 , 6 ] . into_iter ( ) . collect ( ) ;
2844
+
2845
+ // normal append
2846
+ a. append ( & mut b) ;
2847
+ assert_eq ! ( a. iter( ) . cloned( ) . collect( ) , vec![ 1 , 2 , 3 , 4 , 5 , 6 ] ) ;
2848
+ assert_eq ! ( b. iter( ) . cloned( ) . collect( ) , vec![ ] ) ;
2849
+
2850
+ // append nothing to something
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 something to nothing
2856
+ b. append ( & mut a) ;
2857
+ assert_eq ! ( b. iter( ) . cloned( ) . collect( ) , vec![ 1 , 2 , 3 , 4 , 5 , 6 ] ) ;
2858
+ assert_eq ! ( a. iter( ) . cloned( ) . collect( ) , vec![ ] ) ;
2859
+ }
2816
2860
}
0 commit comments