]> git.lizzy.rs Git - rust.git/commitdiff
Use Vec::splice impl in string::Splice::drop()
authorMatt Ickstadt <mattico8@gmail.com>
Sat, 8 Apr 2017 21:43:30 +0000 (16:43 -0500)
committerMatt Ickstadt <mattico8@gmail.com>
Mon, 24 Apr 2017 02:23:50 +0000 (21:23 -0500)
src/libcollections/string.rs

index e7085e94336ff6ed0bf0be3e1ee118ff08d0dfc0..0a82fda09cb84dc935d38cb02715b7793aee7c74 100644 (file)
@@ -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());
         }
     }
 }