diff options
| author | bors <bors@rust-lang.org> | 2014-10-24 01:02:21 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-10-24 01:02:21 +0000 |
| commit | c53f8a920ec065ed109e2834572645cc47a9e597 (patch) | |
| tree | 59653a66cddbbc0672ba3cd19bd7060116750542 /src/libcore | |
| parent | 56d544f7adc455fc1d7dfaec80315ea44e46d9ae (diff) | |
| parent | cea171b0aecfbf982c606ce3d9be09ba8405fbd6 (diff) | |
| download | rust-c53f8a920ec065ed109e2834572645cc47a9e597.tar.gz rust-c53f8a920ec065ed109e2834572645cc47a9e597.zip | |
auto merge of #17960 : mahkoh/rust/clone_from_slice, r=pcwalton
Old vs. New vs. Vec::push_all ``` test slice ... bench: 3091942 ns/iter (+/- 54460) test slice_new ... bench: 1800065 ns/iter (+/- 69513) test vec ... bench: 1804805 ns/iter (+/- 75609) ```
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/slice.rs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/libcore/slice.rs b/src/libcore/slice.rs index 6b24592b17f..88d64a1e669 100644 --- a/src/libcore/slice.rs +++ b/src/libcore/slice.rs @@ -853,13 +853,16 @@ pub trait MutableCloneableSlice<T> { } #[unstable = "trait is unstable"] -impl<'a, T:Clone> MutableCloneableSlice<T> for &'a mut [T] { +impl<'a, T: Clone> MutableCloneableSlice<T> for &'a mut [T] { #[inline] fn clone_from_slice(self, src: &[T]) -> uint { - for (a, b) in self.iter_mut().zip(src.iter()) { - a.clone_from(b); + let min = cmp::min(self.len(), src.len()); + let dst = self.slice_to_mut(min); + let src = src.slice_to(min); + for i in range(0, min) { + dst[i].clone_from(&src[i]); } - cmp::min(self.len(), src.len()) + min } } |
