tweak swap_remove

This commit is contained in:
Ralf Jung 2020-04-05 08:40:40 +02:00
parent 5bbaac357d
commit 7e81c11aa8
1 changed files with 4 additions and 3 deletions

View File

@ -963,14 +963,15 @@ impl<T> Vec<T> {
#[inline]
#[stable(feature = "rust1", since = "1.0.0")]
pub fn swap_remove(&mut self, index: usize) -> T {
assert!(index < self.len);
let len = self.len();
assert!(index < len);
unsafe {
// We replace self[index] with the last element. Note that if the
// bounds check above succeeds there must be a last element (which
// can be self[index] itself).
let last = ptr::read(self.as_ptr().add(self.len - 1));
let last = ptr::read(self.as_ptr().add(len - 1));
let hole: *mut T = self.as_mut_ptr().add(index);
self.len -= 1;
self.set_len(len - 1);
ptr::replace(hole, last)
}
}