Skip to content

Commit

Permalink
Use Vec::splice impl in string::Splice::drop()
Browse files Browse the repository at this point in the history
  • Loading branch information
mattico committed Apr 24, 2017
1 parent cec00ba commit c3baa8c
Showing 1 changed file with 1 addition and 15 deletions.
16 changes: 1 addition & 15 deletions src/libcollections/string.rs
Expand Up @@ -2242,21 +2242,7 @@ impl<'a, 'b> Drop for Splice<'a, 'b> {
fn drop(&mut self) {
unsafe {
let vec = (*self.string).as_mut_vec();
let range_len = self.end - self.start;
let replacement_len = self.replace_with.len();
let tail_len = vec.len() - self.end;
if replacement_len > range_len {
vec.reserve(replacement_len - range_len);
}
if replacement_len != range_len {
let src = vec.as_ptr().offset(self.end as isize);
let dst = vec.as_mut_ptr().offset((self.start + replacement_len) as isize);
ptr::copy(src, dst, tail_len);
}
let src = self.replace_with.as_ptr();
let dst = vec.as_mut_ptr().offset(self.start as isize);
ptr::copy(src, dst, replacement_len);
vec.set_len(self.start + replacement_len + tail_len);
vec.splice(self.start..self.end, self.replace_with.bytes());
}
}
}
Expand Down

0 comments on commit c3baa8c

Please sign in to comment.