diff options
| author | Brian Anderson <banderson@mozilla.com> | 2014-02-08 22:16:42 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2014-02-09 00:17:41 -0800 |
| commit | c7710cdf4563533b211a16cb02a9b4cb70ed3ca9 (patch) | |
| tree | 2c1280bdcad9bdd4a60a1df8dc18e4cae127a9aa /src/libstd | |
| parent | d433b80e026960b28ba660ebdb09175237e02e05 (diff) | |
| download | rust-c7710cdf4563533b211a16cb02a9b4cb70ed3ca9.tar.gz rust-c7710cdf4563533b211a16cb02a9b4cb70ed3ca9.zip | |
std: Add move_val_init to mem. Replace direct intrinsic usage
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/mem.rs | 9 | ||||
| -rw-r--r-- | src/libstd/vec.rs | 11 | ||||
| -rw-r--r-- | src/libstd/vec_ng.rs | 3 |
3 files changed, 15 insertions, 8 deletions
diff --git a/src/libstd/mem.rs b/src/libstd/mem.rs index 05bc8ed9826..c1cf226a8f2 100644 --- a/src/libstd/mem.rs +++ b/src/libstd/mem.rs @@ -83,6 +83,15 @@ pub unsafe fn uninit<T>() -> T { intrinsics::uninit() } +/// Move a value to an uninitialized memory location. +/// +/// Drop glue is not run on the destination. +#[inline] +pub unsafe fn move_val_init<T>(dst: &mut T, src: T) { + intrinsics::move_val_init(dst, src) +} + + #[cfg(test)] mod tests { use mem::*; diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index fa5566ecab4..85413cb5bd6 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -120,7 +120,6 @@ use mem::size_of; use kinds::marker; use uint; use unstable::finally::Finally; -use unstable::intrinsics; use unstable::raw::{Repr, Slice, Vec}; use util; @@ -137,7 +136,7 @@ pub fn from_fn<T>(n_elts: uint, op: |uint| -> T) -> ~[T] { let mut i: uint = 0u; (|| { while i < n_elts { - intrinsics::move_val_init(&mut(*ptr::mut_offset(p, i as int)), op(i)); + mem::move_val_init(&mut(*ptr::mut_offset(p, i as int)), op(i)); i += 1u; } }).finally(|| { @@ -164,7 +163,7 @@ pub fn from_elem<T:Clone>(n_elts: uint, t: T) -> ~[T] { let mut i = 0u; (|| { while i < n_elts { - intrinsics::move_val_init(&mut(*ptr::mut_offset(p, i as int)), t.clone()); + mem::move_val_init(&mut(*ptr::mut_offset(p, i as int)), t.clone()); i += 1u; } }).finally(|| { @@ -1495,7 +1494,7 @@ impl<T> OwnedVector<T> for ~[T] { (**repr).fill += mem::nonzero_size_of::<T>(); let p = to_unsafe_ptr(&((**repr).data)); let p = ptr::offset(p, fill as int) as *mut T; - intrinsics::move_val_init(&mut(*p), t); + mem::move_val_init(&mut(*p), t); } } @@ -1552,7 +1551,7 @@ impl<T> OwnedVector<T> for ~[T] { ptr::copy_memory(p.offset(1), p, len - i); // Write it in, overwriting the first copy of the `i`th // element. - intrinsics::move_val_init(&mut *p, x); + mem::move_val_init(&mut *p, x); self.set_len(len + 1); } } @@ -2397,7 +2396,7 @@ impl<'a,T> MutableVector<'a, T> for &'a mut [T] { #[inline] unsafe fn init_elem(self, i: uint, val: T) { - intrinsics::move_val_init(&mut (*self.as_mut_ptr().offset(i as int)), val); + mem::move_val_init(&mut (*self.as_mut_ptr().offset(i as int)), val); } #[inline] diff --git a/src/libstd/vec_ng.rs b/src/libstd/vec_ng.rs index c49a7302e72..90bc5836240 100644 --- a/src/libstd/vec_ng.rs +++ b/src/libstd/vec_ng.rs @@ -17,14 +17,13 @@ use clone::Clone; use iter::{DoubleEndedIterator, Iterator}; use num::CheckedMul; use container::Container; -use mem::size_of; +use mem::{size_of, move_val_init}; use cast::{forget, transmute}; use rt::global_heap::{malloc_raw, realloc_raw}; use vec::{ImmutableVector, Items, MutableVector}; use unstable::raw::Slice; use ptr::{offset, read_ptr}; use libc::{free, c_void}; -use unstable::intrinsics::move_val_init; pub struct Vec<T> { priv len: uint, |
