Skip to content

Commit a6e44cf

Browse files
committed
---
yaml --- r: 174438 b: refs/heads/batch c: a833337 h: refs/heads/master v: v3
1 parent b8dd62d commit a6e44cf

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ refs/tags/0.12.0: f0c419429ef30723ceaf6b42f9b5a2aeb5d2e2d1
2929
refs/heads/issue-18208-method-dispatch-2: 9e1eae4fb9b6527315b4441cf8a0f5ca911d1671
3030
refs/heads/automation-fail: 1bf06495443584539b958873e04cc2f864ab10e4
3131
refs/heads/issue-18208-method-dispatch-3-quick-reject: 2009f85b9f99dedcec4404418eda9ddba90258a2
32-
refs/heads/batch: 8b2335a01d000300cca7d8b12210e605424eedb4
32+
refs/heads/batch: a833337943300db1c310a4cf9c84b7b4ef4e9468
3333
refs/heads/building: 126db549b038c84269a1e4fe46f051b2c15d6970
3434
refs/heads/beta: 44a287e6eb22ec3c2a687fc156813577464017f7
3535
refs/heads/windistfix: 7608dbad651f02e837ed05eef3d74a6662a6e928

branches/batch/src/libcollections/vec.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,43 @@ impl<T> Vec<T> {
681681
}
682682
}
683683

684+
/// Moves all the elements of `other` into `Self`, leaving `other` empty.
685+
///
686+
/// # Panics
687+
///
688+
/// Panics if the number of elements in the vector overflows a `uint`.
689+
///
690+
/// # Examples
691+
/// ```rust
692+
/// let mut vec = vec![1, 2, 3];
693+
/// let mut vec2 = vec![4, 5, 6];
694+
/// vec.append(&mut vec2);
695+
/// assert_eq!(vec, vec![1, 2, 3, 4, 5, 6]);
696+
/// assert_eq!(vec2, vec![]);
697+
/// ```
698+
#[inline]
699+
#[unstable = "new API, waiting for dust to settle"]
700+
pub fn append(&mut self, other: &mut Self) {
701+
if mem::size_of::<T>() == 0 {
702+
// zero-size types consume no memory, so we can't rely on the
703+
// address space running out
704+
self.len = self.len.checked_add(other.len()).expect("length overflow");
705+
unsafe { other.set_len(0) }
706+
return;
707+
}
708+
self.reserve(other.len());
709+
let len = self.len();
710+
unsafe {
711+
ptr::copy_nonoverlapping_memory(
712+
self.get_unchecked_mut(len),
713+
other.as_ptr(),
714+
other.len());
715+
}
716+
717+
self.len += other.len();
718+
unsafe { other.set_len(0); }
719+
}
720+
684721
/// Creates a draining iterator that clears the `Vec` and iterates over
685722
/// the removed items from start to end.
686723
///
@@ -2290,6 +2327,15 @@ mod tests {
22902327
assert_eq!(ys.as_slice(), [1u, 2, 3]);
22912328
}
22922329

2330+
#[test]
2331+
fn test_append() {
2332+
let mut vec = vec![1, 2, 3];
2333+
let mut vec2 = vec![4, 5, 6];
2334+
vec.append(&mut vec2);
2335+
assert_eq!(vec, vec![1, 2, 3, 4, 5, 6]);
2336+
assert_eq!(vec2, vec![]);
2337+
}
2338+
22932339
#[bench]
22942340
fn bench_new(b: &mut Bencher) {
22952341
b.iter(|| {

0 commit comments

Comments
 (0)