1#![no_std]
12
13#[doc(hidden)]
14pub use num_traits;
15
16#[doc(hidden)]
17pub use integer_sqrt;
18
19#[doc(hidden)]
20pub use uint;
21
22#[macro_export]
24macro_rules! impl_uint_num_traits {
25 ($name: ident, $len: expr) => {
26 impl $crate::num_traits::sign::Unsigned for $name {}
27
28 impl $crate::num_traits::identities::Zero for $name {
29 #[inline]
30 fn zero() -> Self {
31 Self::zero()
32 }
33
34 #[inline]
35 fn is_zero(&self) -> bool {
36 self.is_zero()
37 }
38 }
39
40 impl $crate::num_traits::identities::One for $name {
41 #[inline]
42 fn one() -> Self {
43 Self::one()
44 }
45 }
46
47 impl $crate::num_traits::Num for $name {
48 type FromStrRadixErr = $crate::uint::FromStrRadixErr;
49
50 fn from_str_radix(txt: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr> {
51 Self::from_str_radix(txt, radix)
52 }
53 }
54
55 impl $crate::integer_sqrt::IntegerSquareRoot for $name {
56 fn integer_sqrt_checked(&self) -> Option<Self> {
57 Some(self.integer_sqrt())
58 }
59 }
60
61 impl $crate::num_traits::ops::checked::CheckedAdd for $name {
62 #[inline]
63 fn checked_add(&self, v: &Self) -> Option<Self> {
64 $name::checked_add(*self, *v)
65 }
66 }
67
68 impl $crate::num_traits::ops::checked::CheckedSub for $name {
69 #[inline]
70 fn checked_sub(&self, v: &Self) -> Option<Self> {
71 $name::checked_sub(*self, *v)
72 }
73 }
74
75 impl $crate::num_traits::ops::checked::CheckedDiv for $name {
76 #[inline]
77 fn checked_div(&self, v: &Self) -> Option<Self> {
78 $name::checked_div(*self, *v)
79 }
80 }
81
82 impl $crate::num_traits::ops::checked::CheckedMul for $name {
83 #[inline]
84 fn checked_mul(&self, v: &Self) -> Option<Self> {
85 $name::checked_mul(*self, *v)
86 }
87 }
88 };
89}