fastnum/bint/uint/
checked.rs1use crate::bint::{
2 checked::checked_impl,
3 doc,
4 intrinsics::ExpType,
5 uint::{math, powers},
6 utils::tuple_to_option,
7 Int, UInt,
8};
9
10checked_impl!(UInt, U);
11
12impl<const N: usize> UInt<N> {
13 #[doc = doc::checked::checked_add_signed!(U 256)]
14 #[must_use = doc::must_use_op!()]
15 #[inline(always)]
16 pub const fn checked_add_signed(self, rhs: Int<N>) -> Option<Self> {
17 tuple_to_option(self.overflowing_add_signed(rhs))
18 }
19
20 #[doc = doc::checked::checked_mul!(U 256)]
21 #[must_use = doc::must_use_op!()]
22 #[inline(always)]
23 pub const fn checked_mul(self, rhs: Self) -> Option<Self> {
24 tuple_to_option(self.overflowing_mul(rhs))
25 }
26
27 #[doc = doc::checked::checked_ilog2!(U 256)]
28 #[must_use = doc::must_use_op!()]
29 #[inline(always)]
30 pub const fn checked_ilog2(self) -> Option<ExpType> {
31 self.0.checked_ilog2()
32 }
33
34 #[doc = doc::checked::checked_ilog10!(U 256)]
35 #[must_use = doc::must_use_op!()]
36 #[inline(always)]
37 pub const fn checked_ilog10(self) -> Option<ExpType> {
38 if self.is_zero() {
39 return None;
40 }
41
42 Some(math::ilog::ilog10(self))
43 }
44
45 #[doc = doc::checked::checked_ilog!(U 256)]
46 #[must_use = doc::must_use_op!()]
47 #[inline(always)]
48 pub const fn checked_ilog(self, base: Self) -> Option<ExpType> {
49 self.0.checked_ilog(base.0)
50 }
51
52 #[doc = doc::checked::checked_next_power_of_two!(U 256)]
53 #[must_use = doc::must_use_op!()]
54 #[inline(always)]
55 pub const fn checked_next_power_of_two(self) -> Option<Self> {
56 match self.0.checked_next_power_of_two() {
57 Some(value) => Some(Self(value)),
58 None => None,
59 }
60 }
61
62 #[doc = doc::checked::checked_power_of_ten!(U 256)]
63 #[must_use = doc::must_use_op!()]
64 #[inline(always)]
65 pub const fn checked_power_of_ten(power: ExpType) -> Option<Self> {
66 powers::checked_power_of_ten(power)
67 }
68
69 #[doc = doc::checked::checked_power_of_five!(U 256)]
70 #[must_use = doc::must_use_op!()]
71 #[inline(always)]
72 pub const fn checked_power_of_five(power: ExpType) -> Option<Self> {
73 powers::checked_power_of_five(power)
74 }
75
76 #[doc = doc::checked::checked_mul_digit!(U 256)]
77 #[must_use = doc::must_use_op!()]
78 #[inline(always)]
79 pub const fn checked_mul_digit(self, digit: u64) -> Option<Self> {
80 tuple_to_option(self.overflowing_mul_digit(digit))
81 }
82
83 #[doc = doc::checked::checked_add!(U 256)]
84 #[must_use = doc::must_use_op!()]
85 #[inline(always)]
86 pub const fn checked_add_digit(self, digit: u64) -> Option<Self> {
87 tuple_to_option(self.overflowing_add_digit(digit))
88 }
89}