unsafe {
let mut x = intrinsics::init(); // dummy value to swap in
// moving the object out is needed to call the destructor
- util::replace_ptr(self.ptr, x);
+ ptr::replace_ptr(self.ptr, x);
free(self.ptr as *c_void)
}
}
use core::ptr;
use core::sys;
use core::unstable::intrinsics;
-use core::util;
struct RcBox<T> {
value: T,
unsafe {
(*self.ptr).count -= 1;
if (*self.ptr).count == 0 {
- util::replace_ptr(self.ptr, intrinsics::uninit());
+ ptr::replace_ptr(self.ptr, intrinsics::uninit());
free(self.ptr as *c_void)
}
}
unsafe {
(*self.ptr).count -= 1;
if (*self.ptr).count == 0 {
- util::replace_ptr(self.ptr, uninit());
+ ptr::replace_ptr(self.ptr, uninit());
free(self.ptr as *c_void)
}
}
#[cfg(stage0)] use libc::{c_void, size_t};
use option::{Option, Some, None};
use sys;
+use unstable::intrinsics;
#[cfg(not(test))] use cmp::{Eq, Ord};
use uint;
memset64(dst, c, count as u64);
}
+/**
+ * Swap the values at two mutable locations of the same type, without
+ * deinitialising or copying either one.
+ */
+#[inline]
+pub unsafe fn swap_ptr<T>(x: *mut T, y: *mut T) {
+ // Give ourselves some scratch space to work with
+ let mut tmp: T = intrinsics::uninit();
+ let t: *mut T = &mut tmp;
+
+ // Perform the swap
+ copy_memory(t, x, 1);
+ copy_memory(x, y, 1);
+ copy_memory(y, t, 1);
+
+ // y and t now point to the same thing, but we need to completely forget `tmp`
+ // because it's no longer relevant.
+ cast::forget(tmp);
+}
+
+/**
+ * Replace the value at a mutable location with a new one, returning the old
+ * value, without deinitialising or copying either one.
+ */
+#[inline(always)]
+pub unsafe fn replace_ptr<T>(dest: *mut T, mut src: T) -> T {
+ swap_ptr(dest, &mut src);
+ src
+}
+
/**
Transform a region pointer - &T - to an unsafe pointer - *T.
This is safe, but is implemented with an unsafe block due to
}
}
-/**
- * Swap the values at two mutable locations of the same type, without
- * deinitialising or copying either one.
- */
-#[inline]
-pub unsafe fn swap_ptr<T>(x: *mut T, y: *mut T) {
- // Give ourselves some scratch space to work with
- let mut tmp: T = intrinsics::uninit();
- let t: *mut T = &mut tmp;
-
- // Perform the swap
- ptr::copy_memory(t, x, 1);
- ptr::copy_memory(x, y, 1);
- ptr::copy_memory(y, t, 1);
-
- // y and t now point to the same thing, but we need to completely forget `tmp`
- // because it's no longer relevant.
- cast::forget(tmp);
-}
-
/**
* Replace the value at a mutable location with a new one, returning the old
* value, without deinitialising or copying either one.
src
}
-/**
- * Replace the value at a mutable location with a new one, returning the old
- * value, without deinitialising or copying either one.
- */
-#[inline(always)]
-pub unsafe fn replace_ptr<T>(dest: *mut T, mut src: T) -> T {
- swap_ptr(dest, ptr::to_mut_unsafe_ptr(&mut src));
- src
-}
-
/// A non-copyable dummy type.
pub struct NonCopyable {
priv i: (),
let vp = raw::to_mut_ptr(*v);
let vp = ptr::mut_offset(vp, next_ln - 1);
- util::replace_ptr(vp, work_elt)
+ ptr::replace_ptr(vp, work_elt)
}
}
// elements during unwinding
let x = intrinsics::init();
let p = ptr::mut_offset(p, i);
- f(i, util::replace_ptr(p, x));
+ f(i, ptr::replace_ptr(p, x));
}
}
// elements during unwinding
let x = intrinsics::init();
let p = ptr::mut_offset(p, i);
- f(i, util::replace_ptr(p, x));
+ f(i, ptr::replace_ptr(p, x));
}
}
}
let valptr = ptr::to_mut_unsafe_ptr(&mut v[ln - 1u]);
unsafe {
- let val = util::replace_ptr(valptr, intrinsics::init());
+ let val = ptr::replace_ptr(valptr, intrinsics::init());
raw::set_len(v, ln - 1u);
val
}
unsafe {
do as_mut_buf(rhs) |p, len| {
for uint::range(0, len) |i| {
- let x = util::replace_ptr(ptr::mut_offset(p, i),
- intrinsics::uninit());
+ let x = ptr::replace_ptr(ptr::mut_offset(p, i),
+ intrinsics::uninit());
push(&mut *v, x);
}
}
unsafe {
// This loop is optimized out for non-drop types.
for uint::range(newlen, oldlen) |i| {
- util::replace_ptr(ptr::mut_offset(p, i), intrinsics::uninit());
+ ptr::replace_ptr(ptr::mut_offset(p, i), intrinsics::uninit());
}
}
}
// last_written < next_to_read < ln
if *ptr::mut_offset(p, next_to_read) ==
*ptr::mut_offset(p, last_written) {
- util::replace_ptr(ptr::mut_offset(p, next_to_read),
- intrinsics::uninit());
+ ptr::replace_ptr(ptr::mut_offset(p, next_to_read),
+ intrinsics::uninit());
} else {
last_written += 1;
// last_written <= next_to_read < ln
if next_to_read != last_written {
- util::swap_ptr(ptr::mut_offset(p, last_written),
- ptr::mut_offset(p, next_to_read));
+ ptr::swap_ptr(ptr::mut_offset(p, last_written),
+ ptr::mut_offset(p, next_to_read));
}
}
// last_written <= next_to_read < ln
// them to their raw pointers to do the swap
let pa: *mut T = ptr::to_mut_unsafe_ptr(&mut v[a]);
let pb: *mut T = ptr::to_mut_unsafe_ptr(&mut v[b]);
- util::swap_ptr(pa, pb);
+ ptr::swap_ptr(pa, pb);
}
}
fn do_swap(test: &mut TestDescAndFn) {
unsafe {
- util::swap_ptr(ptr::to_mut_unsafe_ptr(test),
- ptr::to_mut_unsafe_ptr(test));
+ ptr::swap_ptr(ptr::to_mut_unsafe_ptr(test),
+ ptr::to_mut_unsafe_ptr(test));
}
}