From c1cccb809d132111c79f1fdfaeaa2fb4b0246d59 Mon Sep 17 00:00:00 2001 From: LEXUGE Date: Thu, 5 Apr 2018 19:02:55 +0800 Subject: [PATCH 1/5] Add `CheckedRem` and `CheckedAbs` traits Also impl them for u8~size and i8~size --- src/ops/checked.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/ops/checked.rs b/src/ops/checked.rs index 020f649..7339020 100644 --- a/src/ops/checked.rs +++ b/src/ops/checked.rs @@ -90,6 +90,51 @@ checked_impl!(CheckedDiv, checked_div, i32); checked_impl!(CheckedDiv, checked_div, i64); checked_impl!(CheckedDiv, checked_div, isize); +// CheckedRem +pub trait CheckedRem: Sized + Rem { + fn checked_rem(&self, v: &Self) -> Option; +} + +checked_impl!(CheckedRem, checked_rem, u8); +checked_impl!(CheckedRem, checked_rem, u16); +checked_impl!(CheckedRem, checked_rem, u32); +checked_impl!(CheckedRem, checked_rem, u64); +checked_impl!(CheckedRem, checked_rem, usize); + +checked_impl!(CheckedRem, checked_rem, i8); +checked_impl!(CheckedRem, checked_rem, i16); +checked_impl!(CheckedRem, checked_rem, i32); +checked_impl!(CheckedRem, checked_rem, i64); +checked_impl!(CheckedRem, checked_rem, isize); + +macro_rules! checked_abs_impl { + ($t:ty) => { + impl CheckedAbs for $t { + #[inline] + fn checked_abs(self) -> Option<$t> { + <$t>::checked_abs(*self) + } + } + } +} + +// CheckedAbs +pub trait CheckedAbs: Sized { + fn checked_abs(&self) -> Option; +} + +checked_abs_impl!(u8); +checked_abs_impl!(u16); +checked_abs_impl!(u32); +checked_abs_impl!(u64); +checked_abs_impl!(usize); + +checked_abs_impl!(i8); +checked_abs_impl!(i16); +checked_abs_impl!(i32); +checked_abs_impl!(i64); +checked_abs_impl!(isize); + /// Performs a left shift that returns `None` on overflow. pub trait CheckedShl: Sized + Shl { /// Shifts a number to the left, checking for overflow. If overflow happens, From edd7c4ec8537658e246bc019d9b794f713befed9 Mon Sep 17 00:00:00 2001 From: LEXUGE Date: Thu, 5 Apr 2018 19:06:18 +0800 Subject: [PATCH 2/5] Update checked.rs --- src/ops/checked.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ops/checked.rs b/src/ops/checked.rs index 7339020..a61215b 100644 --- a/src/ops/checked.rs +++ b/src/ops/checked.rs @@ -1,4 +1,4 @@ -use core::ops::{Add, Sub, Mul, Div, Shl, Shr}; +use core::ops::{Add, Sub, Mul, Div, Rem, Shl, Shr}; /// Performs addition that returns `None` instead of wrapping around on /// overflow. From 42b2ef81c0c534f671f05d8d5e2ab37939f2e30e Mon Sep 17 00:00:00 2001 From: LEXUGE Date: Thu, 5 Apr 2018 19:11:47 +0800 Subject: [PATCH 3/5] Update checked.rs --- src/ops/checked.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ops/checked.rs b/src/ops/checked.rs index a61215b..1456228 100644 --- a/src/ops/checked.rs +++ b/src/ops/checked.rs @@ -111,7 +111,7 @@ macro_rules! checked_abs_impl { ($t:ty) => { impl CheckedAbs for $t { #[inline] - fn checked_abs(self) -> Option<$t> { + fn checked_abs(&self) -> Option<$t> { <$t>::checked_abs(*self) } } From ca343c0af2178e27233f7c2147a64f41123f7d23 Mon Sep 17 00:00:00 2001 From: LEXUGE Date: Thu, 5 Apr 2018 19:16:07 +0800 Subject: [PATCH 4/5] Update checked.rs --- src/ops/checked.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ops/checked.rs b/src/ops/checked.rs index 1456228..5e6bb96 100644 --- a/src/ops/checked.rs +++ b/src/ops/checked.rs @@ -111,8 +111,8 @@ macro_rules! checked_abs_impl { ($t:ty) => { impl CheckedAbs for $t { #[inline] - fn checked_abs(&self) -> Option<$t> { - <$t>::checked_abs(*self) + fn checked_abs(self) -> Option<$t> { + <$t>::checked_abs(self) } } } @@ -120,7 +120,7 @@ macro_rules! checked_abs_impl { // CheckedAbs pub trait CheckedAbs: Sized { - fn checked_abs(&self) -> Option; + fn checked_abs(self) -> Option; } checked_abs_impl!(u8); From 9047722838e4352d2a2af1125d1693b1900d3d5e Mon Sep 17 00:00:00 2001 From: LEXUGE Date: Thu, 5 Apr 2018 19:21:51 +0800 Subject: [PATCH 5/5] Update checked.rs --- src/ops/checked.rs | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/src/ops/checked.rs b/src/ops/checked.rs index 5e6bb96..a0feca3 100644 --- a/src/ops/checked.rs +++ b/src/ops/checked.rs @@ -107,34 +107,6 @@ checked_impl!(CheckedRem, checked_rem, i32); checked_impl!(CheckedRem, checked_rem, i64); checked_impl!(CheckedRem, checked_rem, isize); -macro_rules! checked_abs_impl { - ($t:ty) => { - impl CheckedAbs for $t { - #[inline] - fn checked_abs(self) -> Option<$t> { - <$t>::checked_abs(self) - } - } - } -} - -// CheckedAbs -pub trait CheckedAbs: Sized { - fn checked_abs(self) -> Option; -} - -checked_abs_impl!(u8); -checked_abs_impl!(u16); -checked_abs_impl!(u32); -checked_abs_impl!(u64); -checked_abs_impl!(usize); - -checked_abs_impl!(i8); -checked_abs_impl!(i16); -checked_abs_impl!(i32); -checked_abs_impl!(i64); -checked_abs_impl!(isize); - /// Performs a left shift that returns `None` on overflow. pub trait CheckedShl: Sized + Shl { /// Shifts a number to the left, checking for overflow. If overflow happens,