diff --git a/src/libextra/uuid.rs b/src/libextra/uuid.rs index 10c4b8a3e2f4..38a1394d339c 100644 --- a/src/libextra/uuid.rs +++ b/src/libextra/uuid.rs @@ -219,9 +219,7 @@ impl Uuid { } let mut uuid = Uuid{ bytes: [0, .. 16] }; - unsafe { - vec::raw::copy_memory(uuid.bytes, b); - } + vec::bytes::copy_memory(uuid.bytes, b); Some(uuid) } diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index 3a2b7c689552..ed58185e3b03 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -2060,6 +2060,12 @@ pub trait MutableVector<'a, T> { */ unsafe fn init_elem(self, i: uint, val: T); + /// Copies data from `src` to `self` + /// + /// `self` and `src` must not overlap. Fails if `self` is + /// shorter than `src`. + unsafe fn copy_memory(self, src: &[T]); + /// Similar to `as_imm_buf` but passing a `*mut T` fn as_mut_buf(self, f: |*mut T, uint| -> U) -> U; } @@ -2197,6 +2203,16 @@ impl<'a,T> MutableVector<'a, T> for &'a mut [T] { }) } + #[inline] + unsafe fn copy_memory(self, src: &[T]) { + self.as_mut_buf(|p_dst, len_dst| { + src.as_imm_buf(|p_src, len_src| { + assert!(len_dst >= len_src) + ptr::copy_memory(p_dst, p_src, len_src) + }) + }) + } + #[inline] fn as_mut_buf(self, f: |*mut T, uint| -> U) -> U { let Slice{ data, len } = self.repr(); @@ -2238,7 +2254,7 @@ pub unsafe fn from_buf(ptr: *T, elts: uint) -> ~[T] { pub mod raw { use cast; use ptr; - use vec::{with_capacity, ImmutableVector, MutableVector}; + use vec::{with_capacity, MutableVector}; use unstable::raw::Slice; /** @@ -2288,21 +2304,6 @@ pub mod raw { dst } - /** - * Copies data from one vector to another. - * - * Copies `src` to `dst`. The source and destination may overlap. - */ - #[inline] - pub unsafe fn copy_memory(dst: &mut [T], src: &[T]) { - dst.as_mut_buf(|p_dst, len_dst| { - src.as_imm_buf(|p_src, len_src| { - assert!(len_dst >= len_src) - ptr::copy_memory(p_dst, p_src, len_src) - }) - }) - } - /** * Returns a pointer to first element in slice and adjusts * slice so it no longer contains that element. Fails if @@ -2331,7 +2332,7 @@ pub mod raw { /// Operations on `[u8]`. pub mod bytes { - use vec::raw; + use vec::MutableVector; use ptr; /// A trait for operations on mutable `[u8]`s. @@ -2358,8 +2359,8 @@ pub mod bytes { */ #[inline] pub fn copy_memory(dst: &mut [u8], src: &[u8]) { - // Bound checks are done at vec::raw::copy_memory. - unsafe { raw::copy_memory(dst, src) } + // Bound checks are done at .copy_memory. + unsafe { dst.copy_memory(src) } } /** @@ -3585,7 +3586,7 @@ mod tests { unsafe { let mut a = [1, 2, 3, 4]; let b = [1, 2, 3, 4, 5]; - raw::copy_memory(a, b); + a.copy_memory(b); } }