saturating.rs 928 B

123456789101112131415161718192021222324252627282930
  1. /// Saturating math operations
  2. pub trait Saturating {
  3. /// Saturating addition operator.
  4. /// Returns a+b, saturating at the numeric bounds instead of overflowing.
  5. fn saturating_add(self, v: Self) -> Self;
  6. /// Saturating subtraction operator.
  7. /// Returns a-b, saturating at the numeric bounds instead of overflowing.
  8. fn saturating_sub(self, v: Self) -> Self;
  9. }
  10. macro_rules! saturating_impl {
  11. ($trait_name:ident for $($t:ty)*) => {$(
  12. impl $trait_name for $t {
  13. #[inline]
  14. fn saturating_add(self, v: Self) -> Self {
  15. Self::saturating_add(self, v)
  16. }
  17. #[inline]
  18. fn saturating_sub(self, v: Self) -> Self {
  19. Self::saturating_sub(self, v)
  20. }
  21. }
  22. )*}
  23. }
  24. saturating_impl!(Saturating for isize usize i8 u8 i16 u16 i32 u32 i64 u64);
  25. #[cfg(has_i128)]
  26. saturating_impl!(Saturating for i128 u128);