From 90b946912128a08b9b5bd29fbdcc866c83890641 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 5 Oct 2018 09:15:52 -0700 Subject: [PATCH] Revert "Optimize VecDeque::append" This reverts commit 11e488b64fed181820280d494d4fcc157ee1adc5. --- src/liballoc/collections/vec_deque.rs | 29 ++------------------------- 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/src/liballoc/collections/vec_deque.rs b/src/liballoc/collections/vec_deque.rs index 7c16258e84e..d49cb985774 100644 --- a/src/liballoc/collections/vec_deque.rs +++ b/src/liballoc/collections/vec_deque.rs @@ -202,22 +202,6 @@ unsafe fn copy_nonoverlapping(&self, dst: usize, src: usize, len: usize) { len); } - /// Copies all values from `src` to `self`, wrapping around if needed. - /// Assumes capacity is sufficient. - #[inline] - unsafe fn copy_slice(&mut self, src: &[T]) { - let dst_high_ptr = self.ptr().add(self.head); - let dst_high_len = self.cap() - self.head; - - let split = cmp::min(src.len(), dst_high_len); - let (src_high, src_low) = src.split_at(split); - - ptr::copy_nonoverlapping(src_high.as_ptr(), dst_high_ptr, src_high.len()); - ptr::copy_nonoverlapping(src_low.as_ptr(), self.ptr(), src_low.len()); - - self.head = self.wrap_add(self.head, src.len()); - } - /// Copies a potentially wrapping block of memory len long from src to dest. /// (abs(dst - src) + len) must be no larger than cap() (There must be at /// most one continuous overlapping region between src and dest). @@ -1850,17 +1834,8 @@ pub fn split_off(&mut self, at: usize) -> Self { #[inline] #[stable(feature = "append", since = "1.4.0")] pub fn append(&mut self, other: &mut Self) { - // Guarantees there is space in `self` for `other - self.reserve(other.len()); - - unsafe { - let (src_high, src_low) = other.as_slices(); - self.copy_slice(src_low); - self.copy_slice(src_high); - } - - // Some values now exist in both `other` and `self` but are made inaccessible in `other`. - other.tail = other.head; + // naive impl + self.extend(other.drain(..)); } /// Retains only the elements specified by the predicate. -- 2.44.0