提交 9a41cfab 编写于 作者: A Alex Crichton

Revert "Add docs and debug asserts"

This reverts commit 1a1a7f61.
上级 54441484
...@@ -202,17 +202,10 @@ unsafe fn copy_nonoverlapping(&self, dst: usize, src: usize, len: usize) { ...@@ -202,17 +202,10 @@ unsafe fn copy_nonoverlapping(&self, dst: usize, src: usize, len: usize) {
len); len);
} }
/// Copies all values from `src` to the back of `self`, wrapping around if needed. /// Copies all values from `src` to `self`, wrapping around if needed.
/// /// Assumes capacity is sufficient.
/// # Safety
///
/// The capacity must be sufficient to hold self.len() + src.len() elements.
/// If so, this function never panics.
#[inline] #[inline]
unsafe fn copy_slice(&mut self, src: &[T]) { unsafe fn copy_slice(&mut self, src: &[T]) {
let expected_new_len = self.len() + src.len();
debug_assert!(self.capacity() >= expected_new_len);
let dst_high_ptr = self.ptr().add(self.head); let dst_high_ptr = self.ptr().add(self.head);
let dst_high_len = self.cap() - self.head; let dst_high_len = self.cap() - self.head;
...@@ -223,7 +216,6 @@ unsafe fn copy_slice(&mut self, src: &[T]) { ...@@ -223,7 +216,6 @@ unsafe fn copy_slice(&mut self, src: &[T]) {
ptr::copy_nonoverlapping(src_low.as_ptr(), self.ptr(), src_low.len()); ptr::copy_nonoverlapping(src_low.as_ptr(), self.ptr(), src_low.len());
self.head = self.wrap_add(self.head, src.len()); self.head = self.wrap_add(self.head, src.len());
debug_assert!(self.len() == expected_new_len);
} }
/// Copies a potentially wrapping block of memory len long from src to dest. /// Copies a potentially wrapping block of memory len long from src to dest.
...@@ -1858,21 +1850,17 @@ pub fn split_off(&mut self, at: usize) -> Self { ...@@ -1858,21 +1850,17 @@ pub fn split_off(&mut self, at: usize) -> Self {
#[inline] #[inline]
#[stable(feature = "append", since = "1.4.0")] #[stable(feature = "append", since = "1.4.0")]
pub fn append(&mut self, other: &mut Self) { pub fn append(&mut self, other: &mut Self) {
unsafe { // Guarantees there is space in `self` for `other
// Guarantees there is space in `self` for `other`. self.reserve(other.len());
self.reserve(other.len());
{
let (src_high, src_low) = other.as_slices();
// This is only safe because copy_slice never panics when capacity is sufficient. unsafe {
self.copy_slice(src_low); let (src_high, src_low) = other.as_slices();
self.copy_slice(src_high); 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;
} }
// Some values now exist in both `other` and `self` but are made inaccessible in `other`.
other.tail = other.head;
} }
/// Retains only the elements specified by the predicate. /// Retains only the elements specified by the predicate.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册