summaryrefslogtreecommitdiffstats
path: root/third_party/rust/num-traits/src/ops/saturating.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/num-traits/src/ops/saturating.rs')
-rw-r--r--third_party/rust/num-traits/src/ops/saturating.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/third_party/rust/num-traits/src/ops/saturating.rs b/third_party/rust/num-traits/src/ops/saturating.rs
new file mode 100644
index 0000000000..fdce18977c
--- /dev/null
+++ b/third_party/rust/num-traits/src/ops/saturating.rs
@@ -0,0 +1,30 @@
+/// 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);