use nalgebra::RealField;
#[derive(Copy, Debug, Clone)]
pub struct Range<T: RealField> {
pub min: T,
pub max: T,
}
impl<T> Range<T>
where
T: RealField,
{
pub fn new(min: T, max: T) -> Self {
assert!(min <= max, "min must be less than or equal to max");
Range { min, max }
}
pub fn is_valid(&self, val: T) -> bool {
val <= self.max && val >= self.min
}
pub fn clamp(&self, val: T) -> T {
if val < self.min {
self.min.clone()
} else if val > self.max {
self.max.clone()
} else {
val
}
}
}
impl<T> From<::std::ops::RangeInclusive<T>> for Range<T>
where
T: RealField,
{
fn from(range: ::std::ops::RangeInclusive<T>) -> Self {
let (min, max) = range.into_inner();
Range::new(min, max)
}
}