From d5b8e585963f5a8df73d65bc09e14333e118db60 Mon Sep 17 00:00:00 2001 From: cod10129 <110200933+cod10129@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:07:22 -0500 Subject: [PATCH 1/2] Add CheckedNumOps --- src/lib.rs | 3 ++- src/ops/checked.rs | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index d392e920..fa561916 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -37,7 +37,8 @@ pub use crate::identities::{one, zero, ConstOne, ConstZero, One, Zero}; pub use crate::int::PrimInt; pub use crate::ops::bytes::{FromBytes, ToBytes}; pub use crate::ops::checked::{ - CheckedAdd, CheckedDiv, CheckedMul, CheckedNeg, CheckedRem, CheckedShl, CheckedShr, CheckedSub, + CheckedAdd, CheckedDiv, CheckedMul, CheckedNeg, CheckedNumOps, CheckedRem, CheckedShl, + CheckedShr, CheckedSub, }; pub use crate::ops::euclid::{CheckedEuclid, Euclid}; pub use crate::ops::inv::Inv; diff --git a/src/ops/checked.rs b/src/ops/checked.rs index da1eb3ea..0d678090 100644 --- a/src/ops/checked.rs +++ b/src/ops/checked.rs @@ -259,3 +259,10 @@ checked_shift_impl!(CheckedShr, checked_shr, i32); checked_shift_impl!(CheckedShr, checked_shr, i64); checked_shift_impl!(CheckedShr, checked_shr, isize); checked_shift_impl!(CheckedShr, checked_shr, i128); + +/// Generic trait for types implementing basic checked numeric operations. +/// +/// This is automatically implemented for types which implement the operators. +pub trait CheckedNumOps: CheckedAdd + CheckedSub + CheckedMul + CheckedDiv {} + +impl CheckedNumOps for T where T: CheckedAdd + CheckedSub + CheckedMul + CheckedDiv {} From a2ee7a3b363b9191d334f438f904b66afa36c3f9 Mon Sep 17 00:00:00 2001 From: cod10129 <110200933+cod10129@users.noreply.github.com> Date: Thu, 23 May 2024 11:25:34 -0500 Subject: [PATCH 2/2] Add CheckedRem I think this is the right thing to do here, but I'm not entirely sure. --- src/ops/checked.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ops/checked.rs b/src/ops/checked.rs index 0d678090..6ef3386f 100644 --- a/src/ops/checked.rs +++ b/src/ops/checked.rs @@ -263,6 +263,6 @@ checked_shift_impl!(CheckedShr, checked_shr, i128); /// Generic trait for types implementing basic checked numeric operations. /// /// This is automatically implemented for types which implement the operators. -pub trait CheckedNumOps: CheckedAdd + CheckedSub + CheckedMul + CheckedDiv {} +pub trait CheckedNumOps: CheckedAdd + CheckedSub + CheckedMul + CheckedDiv + CheckedRem {} -impl CheckedNumOps for T where T: CheckedAdd + CheckedSub + CheckedMul + CheckedDiv {} +impl CheckedNumOps for T where T: CheckedAdd + CheckedSub + CheckedMul + CheckedDiv + CheckedRem {}