Skip to content

Commit 05711ba

Browse files
committed
naive RingBuf::append impl
1 parent dc930b1 commit 05711ba

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

src/libcollections/ring_buf.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1353,6 +1353,29 @@ impl<T> RingBuf<T> {
13531353

13541354
other
13551355
}
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+
}
13561379
}
13571380

13581381
impl<T: Clone> RingBuf<T> {
@@ -2813,4 +2836,25 @@ mod tests {
28132836
}
28142837
}
28152838
}
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+
}
28162860
}

0 commit comments

Comments
 (0)