pub trait ClampOps {
fn min(self, other: Self) -> Self;
fn max(self, other: Self) -> Self;
fn clamp(self, min: Self, max: Self) -> Self;
}
macro_rules! impl_clamp_int {
($($t:ty),*) => {
$(impl ClampOps for $t {
#[inline] fn min(self, other: Self) -> Self { Ord::min(self, other) }
#[inline] fn max(self, other: Self) -> Self { Ord::max(self, other) }
#[inline] fn clamp(self, min: Self, max: Self) -> Self { Ord::clamp(self, min, max) }
})*
};
}
impl_clamp_int!(u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize);
macro_rules! impl_clamp_float {
($($t:ty),*) => {
$(impl ClampOps for $t {
#[inline] fn min(self, other: Self) -> Self { self.min(other) }
#[inline] fn max(self, other: Self) -> Self { self.max(other) }
#[inline] fn clamp(self, min: Self, max: Self) -> Self { self.clamp(min, max) }
})*
};
}
impl_clamp_float!(f32, f64);