Skip to content

Commit

Permalink
tweak swap_remove
Browse files Browse the repository at this point in the history
  • Loading branch information
RalfJung committed Apr 5, 2020
1 parent 5bbaac3 commit 7e81c11
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/liballoc/vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
Expand Down

0 comments on commit 7e81c11

Please sign in to comment.