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