1#[cfg(feature = "rayon")]
2#[derive(Debug)]
3pub struct ParallelIteratorWrapper<I>(pub(crate) I);
4
5#[cfg(feature = "rayon")]
6#[derive(Debug)]
7pub struct ParallelProducerWrapper<I>(pub(crate) I);
8
9pub(crate) fn are_in_upper_bound<T>(slice: &[T], upper_bound: &T) -> bool
10where
11 T: PartialOrd,
12{
13 slice.iter().all(|x| x < upper_bound)
14}
15
16pub(crate) fn does_not_have_duplicates<T>(slice: &[T]) -> bool
17where
18 T: PartialEq,
19{
20 for (a_idx, a) in slice.iter().enumerate() {
21 for b in slice.iter().skip(a_idx + 1) {
22 if a == b {
23 return false;
24 }
25 }
26 }
27 true
28}
29
30#[inline]
31pub fn matrix_x_y(cols: usize, flattened_idx: usize) -> [usize; 2] {
32 [flattened_idx / cols, flattened_idx % cols]
33}