competitive/num/zero_one.rs
1pub trait Zero: Sized {
2 fn zero() -> Self;
3 #[inline]
4 fn is_zero(&self) -> bool
5 where
6 Self: PartialEq,
7 {
8 self == &Self::zero()
9 }
10 #[inline]
11 fn set_zero(&mut self) {
12 *self = Self::zero();
13 }
14}
15pub trait One: Sized {
16 fn one() -> Self;
17 #[inline]
18 fn is_one(&self) -> bool
19 where
20 Self: PartialEq,
21 {
22 self == &Self::one()
23 }
24 #[inline]
25 fn set_one(&mut self) {
26 *self = Self::one();
27 }
28}
29macro_rules! impl_zero_one {
30 ($({$Trait:ident $method:ident $($t:ty)*, $e:expr})*) => {$($(
31 impl $Trait for $t {
32 fn $method() -> Self {
33 $e
34 }
35 })*)*
36 };
37}
38impl_zero_one!(
39 {Zero zero u8 u16 u32 u64 usize i8 i16 i32 i64 isize u128 i128, 0}
40 {Zero zero f32 f64, 0.}
41 {One one u8 u16 u32 u64 usize i8 i16 i32 i64 isize u128 i128, 1}
42 {One one f32 f64, 1.}
43);