nekolib/traits/
multiplicative.rs1use std::ops::Mul;
7
8pub trait One: Mul<Output = Self> + Sized {
10 fn one() -> Self;
12}
13pub trait MulRecip {
15 type Output;
17 fn mul_recip(self) -> Self::Output;
19}
20pub trait MulAssoc: Mul<Output = Self> + Sized {}
24pub trait MulComm: Mul<Output = Self> + Sized {}
28
29macro_rules! impl_trait {
30 (
31 $( impl ($T:ty) for { $( $U:ty ),* } $S:tt )*
32 ) => {
33 $( $( impl $T for $U $S )* )*
34 };
35}
36
37impl_trait! {
38 impl (One) for {i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize} {
39 fn one() -> Self { 1 }
40 }
41 impl (MulAssoc) for {i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize} {}
42 impl (MulComm) for {i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize} {}
43}