Skip to main content

hexga_map_on/
map_on_common.rs

1/// `u8`, `u16`, `u32`, `u64`, `usize`
2#[macro_export]
3macro_rules! map_on_integer_unsigned {
4    ($($macro_arms:tt)*) => {
5        $crate::map_on!((u8, u16, u32, u64, usize), $($macro_arms)*);
6    };
7}
8
9/// `i8`, `i16`, `i32`, `i64`, `isize`
10#[macro_export]
11macro_rules! map_on_integer_signed {
12    ($($macro_arms:tt)*) => {
13        $crate::map_on!((i8, i16, i32, i64, isize), $($macro_arms)*);
14    };
15}
16
17/// (`u8`, `u16`, `u32`, `u64`, `usize`) + (`i8`, `i16`, `i32`, `i64`, `isize`)
18#[macro_export]
19macro_rules! map_on_integer
20{
21    ($($macro_arms:tt)*) => {
22        $crate::map_on_integer_unsigned!($($macro_arms)*);
23        $crate::map_on_integer_signed!($($macro_arms)*);
24    };
25}
26
27/// `f32`, `f64`
28#[macro_export]
29macro_rules! map_on_float
30{
31    ($($macro_arms:tt)*) => {
32        $crate::map_on!((f32, f64), $($macro_arms)*);
33    };
34}
35
36/// (`u8`, `u16`, `u32`, `u64`, `usize`) + (`i8`, `i16`, `i32`, `i64`, `isize`) + (`f32`, `f64`)
37#[macro_export]
38macro_rules! map_on_number
39{
40    ($($macro_arms:tt)*) => {
41        $crate::map_on_integer!($($macro_arms)*);
42        $crate::map_on_float!($($macro_arms)*);
43    };
44}
45
46/// (`u8`, `u16`, `u32`, `u64`, `usize`) + (`i8`, `i16`, `i32`, `i64`, `isize`) + (`f32`, `f64`) + (`bool`)
47#[macro_export]
48macro_rules! map_on_number_and_bool
49{
50    ($($macro_arms:tt)*) => {
51        $crate::map_on_number!($($macro_arms)*);
52        $crate::map_on!((bool), $($macro_arms)*);
53    };
54}
55
56/// (`u8`, `u16`, `u32`, `u64`, `usize`) + (`i8`, `i16`, `i32`, `i64`, `isize`) + (`f32`, `f64`) + (`bool`) + (`char`)
57#[macro_export]
58macro_rules! map_on_number_and_bool_and_char
59{
60    ($($macro_arms:tt)*) => {
61        $crate::map_on_number!($($macro_arms)*);
62        $crate::map_on!((bool, char), $($macro_arms)*);
63    };
64}
65
66/// `Add`, `Sub`
67#[macro_export]
68macro_rules! map_on_operator_binary_arithmetic_unit {
69    ($($macro_arms:tt)*) => {
70        $crate::map_on!
71        (
72            (
73                (Add, add),
74                (Sub, sub)
75            ),
76            $($macro_arms)*
77        );
78    };
79}
80
81/// (`Add`, `Sub`) + (`Mul`, `Div`, `Rem`)
82#[macro_export]
83macro_rules! map_on_operator_binary_arithmetic {
84    ($($macro_arms:tt)*) => {
85        $crate::map_on_operator_binary_arithmetic_unit!($($macro_arms)*);
86        $crate::map_on!
87        (
88            (
89                (Mul, mul),
90                (Div, div),
91                (Rem, rem)
92            ),
93            $($macro_arms)*
94        );
95    };
96}
97
98/// `BitOr`, `BitAnd`, `Shl`, `Shr`
99#[macro_export]
100macro_rules! map_on_operator_binary_bit {
101    ($($macro_arms:tt)*) => {
102        $crate::map_on!
103        (
104            (
105                (BitOr, bitor),
106                (BitAnd, bitand),
107                (Shl, shl),
108                (Shr, shr)
109            ),
110            $($macro_arms)*
111        );
112    };
113}
114
115/// (`Add`, `Sub`) + (`Mul`, `Div`, `Rem`) + (`BitOr`, `BitAnd`, `Shl`, `Shr`)
116#[macro_export]
117macro_rules! map_on_operator_binary
118{
119    ($($macro_arms:tt)*) => {
120        $crate::map_on_operator_binary_arithmetic!($($macro_arms)*);
121        $crate::map_on_operator_binary_bit!($($macro_arms)*);
122    };
123}
124
125/// `AddAssign`, `SubAssign`
126#[macro_export]
127macro_rules! map_on_operator_assign_arithmetic_unit {
128    ($($macro_arms:tt)*) => {
129        $crate::map_on!
130        (
131            (
132                (AddAssign, add_assign),
133                (SubAssign, sub_assign)
134            ),
135            $($macro_arms)*
136        );
137    };
138}
139
140/// (`AddAssign`, `SubAssign`) + (`MulAssign`, `DivAssign`, `RemAssign`)
141#[macro_export]
142macro_rules! map_on_operator_assign_arithmetic {
143    ($($macro_arms:tt)*) => {
144        $crate::map_on_operator_assign_arithmetic_unit!($($macro_arms)*);
145        $crate::map_on!
146        (
147            (
148                (MulAssign, mul_assign),
149                (DivAssign, div_assign),
150                (RemAssign, rem_assign)
151            ),
152            $($macro_arms)*
153        );
154    };
155}
156
157/// `BitOrAssign`, `BitAndAssign`, `ShlAssign`, `ShrAssign`
158#[macro_export]
159macro_rules! map_on_operator_assign_bit {
160    ($($macro_arms:tt)*) => {
161        $crate::map_on!
162        (
163            (
164                (BitOrAssign, bitor_assign),
165                (BitAndAssign, bitand_assign),
166                (ShlAssign, shl_assign),
167                (ShrAssign, shr_assign)
168            ),
169            $($macro_arms)*
170        );
171    };
172}
173
174/// (`AddAssign`, `SubAssign`) + (`MulAssign`, `DivAssign`, `RemAssign`) + (`BitOrAssign`, `BitAndAssign`, `ShlAssign`, `ShrAssign`)
175#[macro_export]
176macro_rules! map_on_operator_assign
177{
178    ($($macro_arms:tt)*) => {
179        $crate::map_on_operator_assign_arithmetic!($($macro_arms)*);
180        $crate::map_on_operator_assign_bit!($($macro_arms)*);
181    };
182}
183
184/// Macro for mapping over all standard [formatting traits](https://doc.rust-lang.org/std/fmt/index.html#formatting-traits) except [std::fmt::Debug]:
185///
186/// - Display
187/// - Octal
188/// - LowerHex
189/// - UpperHex
190/// - Pointer
191/// - Binary
192/// - LowerExp
193/// - UpperExp
194#[macro_export]
195macro_rules! map_on_std_fmt_without_debug {
196    ($($macro_arms:tt)*) => {
197        $crate::map_on!(
198            (
199                Display,
200                Octal,
201                LowerHex,
202                UpperHex,
203                Pointer,
204                Binary,
205                LowerExp,
206                UpperExp
207            ),
208            $($macro_arms)*
209        );
210    };
211}
212
213/// Macro for mapping over all standard [formatting traits](https://doc.rust-lang.org/std/fmt/index.html#formatting-traits):
214///
215/// - Display
216/// - Debug
217/// - Octal
218/// - LowerHex
219/// - UpperHex
220/// - Pointer
221/// - Binary
222/// - LowerExp
223/// - UpperExp
224#[macro_export]
225macro_rules! map_on_std_fmt {
226    ($($macro_arms:tt)*) => {
227        $crate::map_on_std_fmt_without_debug!($($macro_arms)*);
228        $crate::map_on!((Debug), $($macro_arms)*
229        );
230    };
231}
232
233/// `Not`
234#[macro_export]
235macro_rules! map_on_operator_unary_bit
236{
237    ($($macro_arms:tt)*) => {
238        $crate::map_on!
239        (
240            (
241                (Not, not)
242            ),
243            $($macro_arms)*
244        );
245    };
246}
247
248/// `Neg`, `Abs`
249#[macro_export]
250macro_rules! map_on_operator_unary_arithmetic_unit
251{
252    ($($macro_arms:tt)*) => {
253        $crate::map_on!
254        (
255            (
256                (Neg, neg),
257                (Abs, abs)
258            ),
259            $($macro_arms)*
260        );
261    };
262}
263
264/// (`Not`) + (`Neg`, `Abs`)
265#[macro_export]
266macro_rules! map_on_operator_unary
267{
268    ($($macro_arms:tt)*) => {
269        $crate::map_on_operator_unary_bit!($($macro_arms)*);
270        $crate::map_on_operator_unary_arithmetic_unit!($($macro_arms)*);
271    };
272}