Function sgx_tstd::ptr::swap1.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.

The values pointed at by x and y may overlap, unlike mem::swap which is otherwise equivalent. If the values do overlap, then the overlapping region of memory from x will be used. This is demonstrated in the examples section below.

Safety

This function copies the memory through the raw pointers passed to it as arguments.

Ensure that these pointers are valid before calling swap.

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);
}

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);
}