Function core::ptr::swap 1.0.0[−][src]
pub unsafe fn swap<T>(x: *mut T, y: *mut T)
Swaps the values at two mutable locations of the same type, without deinitializing either.
But for the following two exceptions, this function is semantically
equivalent to mem::swap
:
-
It operates on raw pointers instead of references. When references are available,
mem::swap
should be preferred. -
The two pointed-to values may overlap. If the values do overlap, then the overlapping region of memory from
x
will be used. This is demonstrated in the examples below.
Safety
Behavior is undefined if any of the following conditions are violated:
-
Both
x
andy
must be valid. -
Both
x
andy
must be properly aligned.
Examples
Swapping two non-overlapping regions:
use std::ptr; let mut array = [0, 1, 2, 3]; let x = array[0..].as_mut_ptr() as *mut [u32; 2]; let y = array[2..].as_mut_ptr() as *mut [u32; 2]; unsafe { ptr::swap(x, y); assert_eq!([2, 3, 0, 1], array); }Run
Swapping two overlapping regions:
use std::ptr; let mut array = [0, 1, 2, 3]; let x = array[0..].as_mut_ptr() as *mut [u32; 3]; let y = array[1..].as_mut_ptr() as *mut [u32; 3]; unsafe { ptr::swap(x, y); assert_eq!([1, 0, 1, 2], array); }Run