use crate::swapper::Swapper; | |
use core::{mem, ptr}; | |
use std::cmp::min; | |
pub struct LoopSwapper {} | |
impl Swapper for LoopSwapper { | |
fn swap<T>(a: &mut [T], b: &mut [T]) { | |
for (x, y) in a.iter_mut().zip(b.iter_mut()) { | |
mem::swap(x, y); | |
} | |
} | |
} | |
pub struct PtrSwapper {} | |
impl Swapper for PtrSwapper { | |
fn swap<T>(a: &mut [T], b: &mut [T]) { | |
unsafe { ptr::swap_nonoverlapping(a.as_mut_ptr(), b.as_mut_ptr(), min(a.len(), b.len())) } | |
} | |
} |