1pub struct Helpers<const L_NOM: u32, const L_DENOM: u32, const R_NOM: u32, const R_DENOM: u32>;
17
18impl<const L_NOM: u32, const L_DENOM: u32, const R_NOM: u32, const R_DENOM: u32>
19 Helpers<L_NOM, L_DENOM, R_NOM, R_DENOM>
20{
21 pub const DIVISOR: u64 =
23 gcd::binary_u64(L_DENOM as u64 * R_NOM as u64, R_DENOM as u64 * L_NOM as u64);
24
25 pub const DIVISOR_2: u64 =
27 gcd::binary_u64(L_NOM as u64 * R_NOM as u64, R_DENOM as u64 * L_DENOM as u64);
28
29 pub const RD_TIMES_LN: u64 = (R_DENOM as u64 * L_NOM as u64) / Self::DIVISOR;
31
32 pub const LD_TIMES_RN: u64 = (L_DENOM as u64 * R_NOM as u64) / Self::DIVISOR;
34
35 pub const LN_TIMES_RN: u64 = (L_NOM as u64 * R_NOM as u64) / Self::DIVISOR_2;
37
38 pub const RD_TIMES_LD: u64 = (R_DENOM as u64 * L_DENOM as u64) / Self::DIVISOR_2;
40
41 pub const RATE_TO_DURATION_NUMERATOR: u64 = Self::RD_TIMES_LD / Self::LN_TIMES_RN;
43
44 pub const SAME_BASE: bool = Self::LD_TIMES_RN == Self::RD_TIMES_LN;
46}
47
48#[allow(dead_code)]
49#[allow(path_statements)]
50pub(crate) const fn greater_than_0<const N: u32>() {
51 Assert::<N, 0>::GREATER;
52}
53
54#[allow(dead_code)]
55pub struct Assert<const L: u32, const R: u32>;
57
58#[allow(dead_code)]
59impl<const L: u32, const R: u32> Assert<L, R> {
60 pub const GREATER_EQ: () = assert!(L >= R);
62
63 pub const LESS_EQ: () = assert!(L <= R);
65
66 pub const NOT_EQ: () = assert!(L != R);
68
69 pub const EQ: () = assert!(L == R);
71
72 pub const GREATER: () = assert!(L > R);
74
75 pub const LESS: () = assert!(L < R);
77
78 pub const POWER_OF_TWO: () = assert!(L.is_power_of_two());
80}