| /// 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 { |
| #[inline] |
| fn saturating_add(self, v: Self) -> Self { |
| Self::saturating_add(self, v) |
| } |
| |
| #[inline] |
| 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); |
| #[cfg(has_i128)] |
| saturating_impl!(Saturating for i128 u128); |