#[must_use]
#[inline]
pub fn min_u8(a: u8, b: u8) -> u8 {
if a < b {
a
} else {
b
}
}
#[must_use]
#[inline]
pub fn min_u16(a: u16, b: u16) -> u16 {
if a < b {
a
} else {
b
}
}
#[must_use]
#[inline]
pub fn min_u32(a: u32, b: u32) -> u32 {
if a < b {
a
} else {
b
}
}
#[must_use]
#[inline]
pub fn min_u64(a: u64, b: u64) -> u64 {
if a < b {
a
} else {
b
}
}
#[must_use]
#[inline]
pub fn max_u8(a: u8, b: u8) -> u8 {
if a > b {
a
} else {
b
}
}
#[must_use]
#[inline]
pub fn max_u16(a: u16, b: u16) -> u16 {
if a > b {
a
} else {
b
}
}
#[must_use]
#[inline]
pub fn max_u32(a: u32, b: u32) -> u32 {
if a > b {
a
} else {
b
}
}
#[must_use]
#[inline]
pub fn max_u64(a: u64, b: u64) -> u64 {
if a > b {
a
} else {
b
}
}
#[must_use]
#[inline]
pub fn clamp_u32(x: u32, lo: u32, hi: u32) -> u32 {
assert!(lo <= hi, "Fix: clamp_u32 called with lo > hi");
min_u32(max_u32(x, lo), hi)
}
#[must_use]
#[inline]
pub fn clamp_u64(x: u64, lo: u64, hi: u64) -> u64 {
assert!(lo <= hi, "Fix: clamp_u64 called with lo > hi");
min_u64(max_u64(x, lo), hi)
}
#[must_use]
#[inline]
pub fn clamp_u16(x: u16, lo: u16, hi: u16) -> u16 {
assert!(lo <= hi, "Fix: clamp_u16 called with lo > hi");
min_u16(max_u16(x, lo), hi)
}
#[must_use]
#[inline]
pub fn clamp_u8(x: u8, lo: u8, hi: u8) -> u8 {
assert!(lo <= hi, "Fix: clamp_u8 called with lo > hi");
min_u8(max_u8(x, lo), hi)
}
#[must_use]
#[inline]
pub fn midpoint_u32(a: u32, b: u32) -> u32 {
(a & b).wrapping_add((a ^ b) >> 1)
}
#[must_use]
#[inline]
pub fn midpoint_u64(a: u64, b: u64) -> u64 {
(a & b).wrapping_add((a ^ b) >> 1)
}
#[must_use]
#[inline]
pub fn midpoint_u16(a: u16, b: u16) -> u16 {
(a & b).wrapping_add((a ^ b) >> 1)
}
#[must_use]
#[inline]
pub fn midpoint_u8(a: u8, b: u8) -> u8 {
(a & b).wrapping_add((a ^ b) >> 1)
}
#[must_use]
#[inline]
pub fn abs_diff_u8(a: u8, b: u8) -> u8 {
a.abs_diff(b)
}
#[must_use]
#[inline]
pub fn abs_diff_u16(a: u16, b: u16) -> u16 {
a.abs_diff(b)
}
#[must_use]
#[inline]
pub fn abs_diff_u32(a: u32, b: u32) -> u32 {
a.abs_diff(b)
}
#[must_use]
#[inline]
pub fn abs_diff_u64(a: u64, b: u64) -> u64 {
a.abs_diff(b)
}
#[must_use]
#[inline]
pub fn div_ceil_u32(numer: u32, denom: u32) -> u32 {
assert!(denom != 0, "Fix: div_ceil called with zero denominator");
numer.div_ceil(denom)
}
#[must_use]
#[inline]
pub fn div_ceil_u64(numer: u64, denom: u64) -> u64 {
assert!(denom != 0, "Fix: div_ceil called with zero denominator");
numer.div_ceil(denom)
}
#[must_use]
#[inline]
pub fn div_floor_u32(numer: u32, denom: u32) -> u32 {
assert!(denom != 0, "Fix: div_floor called with zero denominator");
numer / denom
}
#[must_use]
#[inline]
pub fn div_floor_u64(numer: u64, denom: u64) -> u64 {
assert!(denom != 0, "Fix: div_floor called with zero denominator");
numer / denom
}
#[must_use]
#[inline]
pub fn div_round_u8(numer: u8, denom: u8) -> u8 {
assert!(denom != 0, "Fix: div_round_u8 called with zero denominator");
let n = numer as u16;
let d = denom as u16;
((n + d / 2) / d) as u8
}
#[must_use]
#[inline]
pub fn div_round_u16(numer: u16, denom: u16) -> u16 {
assert!(
denom != 0,
"Fix: div_round_u16 called with zero denominator"
);
let n = numer as u32;
let d = denom as u32;
((n + d / 2) / d) as u16
}
#[must_use]
#[inline]
pub fn div_round_u32(numer: u32, denom: u32) -> u32 {
assert!(
denom != 0,
"Fix: div_round_u32 called with zero denominator"
);
let n = u64::from(numer);
let d = u64::from(denom);
((n + d / 2) / d) as u32
}
#[must_use]
#[inline]
pub fn div_round_u64(numer: u64, denom: u64) -> u64 {
assert!(
denom != 0,
"Fix: div_round_u64 called with zero denominator"
);
let n = u128::from(numer);
let d = u128::from(denom);
((n + d / 2) / d) as u64
}