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::swapshould be preferred. -
The two pointed-to values may overlap. If the values do overlap, then the overlapping region of memory from
xwill be used. This is demonstrated in the examples below.
Safety
Behavior is undefined if any of the following conditions are violated:
-
Both
xandymust be valid. -
Both
xandymust 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