1pub fn get_both_ranges<T>(
3 vector: &mut [T],
4 i: usize,
5 j: usize,
6 len: usize,
7) -> (&mut [T], &mut [T]) {
8 debug_assert_ne!(i, j);
9 debug_assert!(i + len <= vector.len());
10 debug_assert!(j + len <= vector.len());
11 if i < j {
12 debug_assert!(i + len <= j);
13 let (first, last) = vector.split_at_mut(j);
14 return (&mut first[i..(i + len)], &mut last[0..len]);
15 } else {
16 debug_assert!(j + len <= i);
17 let (first, last) = vector.split_at_mut(i);
18 return (&mut last[0..len], &mut first[j..(j + len)]);
19 }
20}
21
22pub fn get_both_indices<T>(vector: &mut [T], i: usize, j: usize) -> (&mut T, &mut T) {
23 debug_assert_ne!(i, j);
24 debug_assert!(i < vector.len());
25 debug_assert!(j < vector.len());
26 if i < j {
27 let (first, last) = vector.split_at_mut(j);
28 return (&mut first[i], &mut last[0]);
29 } else {
30 let (first, last) = vector.split_at_mut(i);
31 return (&mut last[0], &mut first[j]);
32 }
33}
34
35pub fn int_div_ceil(num: u64, denom: u64) -> u32 {
41 if num % denom == 0 {
42 (num / denom) as u32
43 } else {
44 (num / denom + 1) as u32
45 }
46}