num_traits/ops/
saturating.rs

1/// Saturating math operations
2pub 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
7    /// Saturating subtraction operator.
8    /// Returns a-b, saturating at the numeric bounds instead of overflowing.
9    fn saturating_sub(self, v: Self) -> Self;
10}
11
12macro_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
28saturating_impl!(Saturating for isize usize i8 u8 i16 u16 i32 u32 i64 u64);
29#[cfg(has_i128)]
30saturating_impl!(Saturating for i128 u128);