From 90c69893f5926032791532695aff597d6a6be3a1 Mon Sep 17 00:00:00 2001 From: Ruchir Khaitan Date: Thu, 2 Jun 2022 13:46:28 -0400 Subject: [PATCH] add Semigroup/Monoid impls for unsigned ints --- src/difference.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/difference.rs b/src/difference.rs index 00d34b00c..0b5fbd0a7 100644 --- a/src/difference.rs +++ b/src/difference.rs @@ -72,10 +72,6 @@ macro_rules! builtin_implementation { #[inline] fn zero() -> Self { 0 } } - impl Abelian for $t { - #[inline] fn negate(self) -> Self { -self } - } - impl Multiply for $t { type Output = Self; fn multiply(self, rhs: &Self) -> Self { self * rhs} @@ -83,12 +79,33 @@ macro_rules! builtin_implementation { }; } +macro_rules! builtin_abelian_implementation { + ($t:ty) => { + impl Abelian for $t { + #[inline] fn negate(self) -> Self { -self } + } + }; +} + builtin_implementation!(i8); builtin_implementation!(i16); builtin_implementation!(i32); builtin_implementation!(i64); builtin_implementation!(i128); builtin_implementation!(isize); +builtin_implementation!(u8); +builtin_implementation!(u16); +builtin_implementation!(u32); +builtin_implementation!(u64); +builtin_implementation!(u128); +builtin_implementation!(usize); + +builtin_abelian_implementation!(i8); +builtin_abelian_implementation!(i16); +builtin_abelian_implementation!(i32); +builtin_abelian_implementation!(i64); +builtin_abelian_implementation!(i128); +builtin_abelian_implementation!(isize); /// Implementations for wrapping signed integers, which have a different zero. macro_rules! wrapping_implementation {