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