]> git.lizzy.rs Git - rust.git/commitdiff
Revert "Optimize VecDeque::append"
authorAlex Crichton <alex@alexcrichton.com>
Fri, 5 Oct 2018 16:15:52 +0000 (09:15 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Fri, 5 Oct 2018 16:15:52 +0000 (09:15 -0700)
This reverts commit 11e488b64fed181820280d494d4fcc157ee1adc5.

src/liballoc/collections/vec_deque.rs

index 7c16258e84ef08830befb12ee0b0b757369a70f4..d49cb9857740d6d096a6e83420522a423d9b1f66 100644 (file)
@@ -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.