#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Debug, Clone, Copy)]
pub enum PairType {
Even(usize),
Uneven(usize, usize),
}
impl PairType {
pub fn _is_uneven(&self) -> bool {
matches!(self, PairType::Uneven { .. })
}
}
pub fn create_pair_type(range: usize, slide: usize) -> PairType {
let p1 = range % slide;
if p1 == 0 {
PairType::Even(slide)
} else {
let p2 = slide - p1;
PairType::Uneven(p1, p2)
}
}
pub const fn pairs_space(range: usize, slide: usize) -> usize {
assert!(range >= slide, "Range needs to be larger than slide");
let p2 = range % slide;
if p2 == 0 {
range / slide
} else {
(2 * range).div_ceil(slide)
}
}