2016-02-15 23:19:23 +00:00
|
|
|
/// Saturating math operations
|
|
|
|
pub trait Saturating {
|
|
|
|
/// Saturating addition operator.
|
|
|
|
/// Returns a+b, saturating at the numeric bounds instead of overflowing.
|
|
|
|
fn saturating_add(self, v: Self) -> Self;
|
|
|
|
|
|
|
|
/// Saturating subtraction operator.
|
|
|
|
/// Returns a-b, saturating at the numeric bounds instead of overflowing.
|
|
|
|
fn saturating_sub(self, v: Self) -> Self;
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! saturating_impl {
|
|
|
|
($trait_name:ident for $($t:ty)*) => {$(
|
|
|
|
impl $trait_name for $t {
|
2016-08-11 05:21:53 +00:00
|
|
|
#[inline]
|
2016-02-15 23:19:23 +00:00
|
|
|
fn saturating_add(self, v: Self) -> Self {
|
|
|
|
Self::saturating_add(self, v)
|
|
|
|
}
|
|
|
|
|
2016-08-11 05:21:53 +00:00
|
|
|
#[inline]
|
2016-02-15 23:19:23 +00:00
|
|
|
fn saturating_sub(self, v: Self) -> Self {
|
|
|
|
Self::saturating_sub(self, v)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)*}
|
|
|
|
}
|
|
|
|
|
|
|
|
saturating_impl!(Saturating for isize usize i8 u8 i16 u16 i32 u32 i64 u64);
|