Skip to content

Commit 3c18bc4

Browse files
committed
naive RingBuf::append impl
1 parent dc930b1 commit 3c18bc4

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

src/libcollections/ring_buf.rs

+50-1
Original file line numberDiff line numberDiff line change
@@ -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

13581386
impl<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

Comments
 (0)