summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Ickstadt <mattico8@gmail.com>2017-04-08 16:43:30 -0500
committerMatt Ickstadt <mattico8@gmail.com>2017-04-23 21:23:50 -0500
commitc3baa8c0a7c0f90c3630c5eacc8f8783505c90ec (patch)
tree3abe1c9606f99483adb2f8a00b016567ddd1c466
parentcec00bab1d5d74e5ad176fea0b2c5aab882f36e7 (diff)
downloadrust-c3baa8c0a7c0f90c3630c5eacc8f8783505c90ec.tar.gz
Use Vec::splice impl in string::Splice::drop()
-rw-r--r--src/libcollections/string.rs16
1 files changed, 1 insertions, 15 deletions
diff --git a/src/libcollections/string.rs b/src/libcollections/string.rs
index e7085e94336..0a82fda09cb 100644
--- a/src/libcollections/string.rs
+++ b/src/libcollections/string.rs
@@ -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());
}
}
}