rstmt_core/freq/
impl_freq_ext.rs

1/*
2    Appellation: impl_freq_ext <module>
3    Created At: 2025.12.29:17:36:58
4    Contrib: @FL03
5*/
6use super::Frequency;
7use crate::RawFrequency;
8use num_traits::{Num, One, Zero};
9
10contained::fmt_wrapper! {
11    impl Frequency<T> {
12        Binary,
13        Debug,
14        Display,
15        LowerExp,
16        LowerHex,
17        Octal,
18        Pointer,
19        UpperExp,
20        UpperHex
21    }
22}
23
24contained::unary_wrapper! {
25    impl Frequency {
26        Neg.neg,
27        Not.not,
28    }
29}
30
31contained::binary_wrapper! {
32    impl Frequency {
33        Add.add,
34        Sub.sub,
35        Mul.mul,
36        Div.div,
37        Rem.rem,
38        BitAnd.bitand,
39        BitOr.bitor,
40        BitXor.bitxor,
41        Shl.shl,
42        Shr.shr,
43    }
44}
45
46impl<T> AsRef<T> for Frequency<T> {
47    fn as_ref(&self) -> &T {
48        &self.0
49    }
50}
51
52impl<T> AsMut<T> for Frequency<T> {
53    fn as_mut(&mut self) -> &mut T {
54        &mut self.0
55    }
56}
57
58impl<T> core::borrow::Borrow<T> for Frequency<T> {
59    fn borrow(&self) -> &T {
60        &self.0
61    }
62}
63
64impl<T> core::borrow::BorrowMut<T> for Frequency<T> {
65    fn borrow_mut(&mut self) -> &mut T {
66        &mut self.0
67    }
68}
69
70impl<T> core::ops::Deref for Frequency<T> {
71    type Target = T;
72
73    fn deref(&self) -> &Self::Target {
74        &self.0
75    }
76}
77
78impl<T> core::ops::DerefMut for Frequency<T> {
79    fn deref_mut(&mut self) -> &mut Self::Target {
80        &mut self.0
81    }
82}
83
84impl<T> From<T> for Frequency<T>
85where
86    T: RawFrequency,
87{
88    fn from(value: T) -> Self {
89        Frequency(value)
90    }
91}
92
93impl<T> PartialEq<T> for Frequency<T>
94where
95    T: PartialEq,
96{
97    fn eq(&self, other: &T) -> bool {
98        &self.0 == other
99    }
100}
101
102impl<'a, T> PartialEq<&'a T> for Frequency<T>
103where
104    T: PartialEq,
105{
106    fn eq(&self, other: &&'a T) -> bool {
107        &self.0 == *other
108    }
109}
110
111impl<'a, T> PartialEq<&'a mut T> for Frequency<T>
112where
113    T: PartialEq,
114{
115    fn eq(&self, other: &&'a mut T) -> bool {
116        &self.0 == *other
117    }
118}
119
120impl<T> PartialOrd<T> for Frequency<T>
121where
122    T: PartialOrd,
123{
124    fn partial_cmp(&self, other: &T) -> Option<core::cmp::Ordering> {
125        self.0.partial_cmp(other)
126    }
127}
128
129impl<'a, T> PartialOrd<&'a T> for Frequency<T>
130where
131    T: PartialOrd,
132{
133    fn partial_cmp(&self, other: &&'a T) -> Option<core::cmp::Ordering> {
134        self.0.partial_cmp(*other)
135    }
136}
137
138impl<'a, T> PartialOrd<&'a mut T> for Frequency<T>
139where
140    T: PartialOrd,
141{
142    fn partial_cmp(&self, other: &&'a mut T) -> Option<core::cmp::Ordering> {
143        self.0.partial_cmp(*other)
144    }
145}
146
147impl<T> One for Frequency<T>
148where
149    T: One,
150{
151    fn one() -> Self {
152        Frequency(T::one())
153    }
154}
155
156impl<T> Zero for Frequency<T>
157where
158    T: Zero,
159{
160    fn zero() -> Self {
161        Frequency(T::zero())
162    }
163
164    fn is_zero(&self) -> bool {
165        self.0.is_zero()
166    }
167}
168
169impl<T> Num for Frequency<T>
170where
171    T: Num,
172{
173    type FromStrRadixErr = T::FromStrRadixErr;
174
175    fn from_str_radix(str: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr> {
176        T::from_str_radix(str, radix).map(Frequency)
177    }
178}