diff options
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/vec.rs | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index c831dd70918..d626b8604db 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -561,7 +561,7 @@ impl<'self, T> RandomAccessIterator<&'self [T]> for ChunkIter<'self, T> { #[cfg(not(test))] pub mod traits { - use super::Vector; + use super::*; use clone::Clone; use cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Equal, Equiv}; @@ -686,17 +686,17 @@ pub mod traits { impl<'self,T:Clone, V: Vector<T>> Add<V, ~[T]> for &'self [T] { #[inline] fn add(&self, rhs: &V) -> ~[T] { - let mut res = self.to_owned(); + let mut res = with_capacity(self.len() + rhs.as_slice().len()); + res.push_all(*self); res.push_all(rhs.as_slice()); res } } + impl<T:Clone, V: Vector<T>> Add<V, ~[T]> for ~[T] { #[inline] fn add(&self, rhs: &V) -> ~[T] { - let mut res = self.to_owned(); - res.push_all(rhs.as_slice()); - res + self.as_slice() + rhs.as_slice() } } } @@ -3662,4 +3662,13 @@ mod bench { } } } + + #[bench] + fn add(b: &mut BenchHarness) { + let xs: &[int] = [5, ..10]; + let ys: &[int] = [5, ..10]; + do b.iter() { + xs + ys; + } + } } |
