Function swap
unsafe const 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 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 second example below. -
The operation is "untyped" in the sense that data may be uninitialized or otherwise violate the requirements of
T. The initialization state is preserved exactly.
Safety
Behavior is undefined if any of the following conditions are violated:
-
Both
xandymust be valid for both reads and writes. They must remain valid even when the other pointer is written. (This means if the memory ranges overlap, the two pointers must not be subject to aliasing restrictions relative to each other.) -
Both
xandymust be properly aligned.
Note that even if T has size 0, the pointers must be properly aligned.
Examples
Swapping two non-overlapping regions:
use ptr;
let mut array = ;
let = array.split_at_mut;
let x = x.as_mut_ptr.; // this is `array[0..2]`
let y = y.as_mut_ptr.; // this is `array[2..4]`
unsafe
Swapping two overlapping regions:
use ptr;
let mut array: = ;
let array_ptr: *mut i32 = array.as_mut_ptr;
let x = array_ptr as *mut ; // this is `array[0..3]`
let y = unsafe as *mut ; // this is `array[1..4]`
unsafe