crate::ix!();
pub fn shuffle<'a, I: 'a, R>(
mut first: I,
last: I,
mut rng: R)
where
I: PartialEq,
I: Copy,
I: Sub<Output = I>,
I: AddAssign<u64>,
I: Add<Output = u64>,
I: Deref<Target = &'a mut I>,
I: DerefMut<Target = &'a mut I>,
I: Add<u64>,
R: RandRange,
<I as Add<u64>>::Output: Deref<Target = &'a mut I>,
<I as Add<u64>>::Output: DerefMut<Target = &'a mut I>,
u64: From<I> {
while first != last {
let j: u64 = rng.randrange(u64::from(last - first));
if j != 0 {
let mut offset = first + j;
std::mem::swap(*first, *(offset));
}
first += 1;
}
}
pub fn shuffle_all<'a, I: 'a, R>(
mut first: I,
mut rng: R)
where
I: PartialEq,
I: Copy,
I: Sub<Output = I>,
I: AddAssign<u64>,
I: Add<Output = u64>,
I: Deref<Target = &'a mut I>,
I: DerefMut<Target = &'a mut I>,
I: Add<u64>,
R: RandRange,
<I as Add<u64>>::Output: Deref<Target = &'a mut I>,
<I as Add<u64>>::Output: DerefMut<Target = &'a mut I>,
u64: From<I> {
todo!();
}