@@ -1302,7 +1302,10 @@ impl<T> RingBuf<T> {
1302
1302
/// Panics if `at > len`
1303
1303
///
1304
1304
/// # Examples
1305
- /// ```rust
1305
+ ///
1306
+ /// ```
1307
+ /// use std::collections::RingBuf;
1308
+ ///
1306
1309
/// let mut buf: RingBuf<_> = vec![1,2,3].into_iter().collect();
1307
1310
/// let buf2 = buf.split_off(1);
1308
1311
/// // buf = [1], buf2 = [2, 3]
@@ -1353,6 +1356,31 @@ impl<T> RingBuf<T> {
1353
1356
1354
1357
other
1355
1358
}
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
+ }
1356
1384
}
1357
1385
1358
1386
impl < T : Clone > RingBuf < T > {
@@ -2813,4 +2841,25 @@ mod tests {
2813
2841
}
2814
2842
}
2815
2843
}
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
+ }
2816
2865
}
0 commit comments