From f74de249c8617e680704fcd9714086b808374951 Mon Sep 17 00:00:00 2001 From: LEXUGE Date: Fri, 13 Apr 2018 16:04:56 +0800 Subject: [PATCH] remove formats --- src/ops/checked.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/ops/checked.rs b/src/ops/checked.rs index 020f649..e232be7 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. @@ -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); + +// CheckedNeg +macro_rules! checked_impl_one_para { + ($trait_name:ident, $method:ident, $t:ty) => { + impl $trait_name for $t { + #[inline] + fn $method(&self) -> Option<$t> { + <$t>::$method(*self) + } + } + } +} + +pub trait CheckedNeg: Sized { + fn checked_neg(&self) -> Option; +} + +checked_impl_one_para!(CheckedNeg, checked_neg, u8); +checked_impl_one_para!(CheckedNeg, checked_neg, u16); +checked_impl_one_para!(CheckedNeg, checked_neg, u32); +checked_impl_one_para!(CheckedNeg, checked_neg, u64); +checked_impl_one_para!(CheckedNeg, checked_neg, usize); + +checked_impl_one_para!(CheckedNeg, checked_neg, i8); +checked_impl_one_para!(CheckedNeg, checked_neg, i16); +checked_impl_one_para!(CheckedNeg, checked_neg, i32); +checked_impl_one_para!(CheckedNeg, checked_neg, i64); +checked_impl_one_para!(CheckedNeg, checked_neg, 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,