malachite_base/num/
macros.rs

1// Copyright © 2025 Mikhail Hogrefe
2//
3// This file is part of Malachite.
4//
5// Malachite is free software: you can redistribute it and/or modify it under the terms of the GNU
6// Lesser General Public License (LGPL) as published by the Free Software Foundation; either version
7// 3 of the License, or (at your option) any later version. See <https://www.gnu.org/licenses/>.
8
9#[doc(hidden)]
10#[macro_export]
11macro_rules! apply_to_unsigneds {
12    ($m: tt) => {
13        $m!(u8);
14        $m!(u16);
15        $m!(u32);
16        $m!(u64);
17        $m!(u128);
18        $m!(usize);
19    };
20}
21
22#[doc(hidden)]
23#[macro_export]
24macro_rules! apply_to_signeds {
25    ($m: tt) => {
26        $m!(i8);
27        $m!(i16);
28        $m!(i32);
29        $m!(i64);
30        $m!(i128);
31        $m!(isize);
32    };
33}
34
35#[doc(hidden)]
36#[macro_export]
37macro_rules! apply_to_primitive_ints {
38    ($m: tt) => {
39        apply_to_unsigneds!($m);
40        apply_to_signeds!($m);
41    };
42}
43
44#[doc(hidden)]
45#[macro_export]
46macro_rules! apply_to_unsigned_signed_pairs {
47    ($m: tt) => {
48        $m!(u8, i8);
49        $m!(u16, i16);
50        $m!(u32, i32);
51        $m!(u64, i64);
52        $m!(u128, i128);
53        $m!(usize, isize);
54    };
55}
56
57#[doc(hidden)]
58#[macro_export]
59macro_rules! apply_fn_to_unsigneds {
60    ($f: ident) => {
61        $f::<u8>();
62        $f::<u16>();
63        $f::<u32>();
64        $f::<u64>();
65        $f::<u128>();
66        $f::<usize>();
67    };
68}
69
70#[doc(hidden)]
71#[macro_export]
72macro_rules! apply_fn_to_signeds {
73    ($f: ident) => {
74        $f::<i8>();
75        $f::<i16>();
76        $f::<i32>();
77        $f::<i64>();
78        $f::<i128>();
79        $f::<isize>();
80    };
81}
82
83#[doc(hidden)]
84#[macro_export]
85macro_rules! apply_fn_to_primitive_ints {
86    ($f: ident) => {
87        apply_fn_to_unsigneds!($f);
88        apply_fn_to_signeds!($f);
89    };
90}
91
92#[doc(hidden)]
93#[macro_export]
94macro_rules! apply_fn_to_unsigned_signed_pairs {
95    ($f: ident) => {
96        $f::<u8, i8>();
97        $f::<u16, i16>();
98        $f::<u32, i32>();
99        $f::<u64, i64>();
100        $f::<u128, i128>();
101        $f::<usize, isize>();
102    };
103}
104
105#[doc(hidden)]
106#[macro_export]
107macro_rules! apply_fn_to_unsigneds_and_unsigneds {
108    ($f: ident) => {
109        $f::<u8, u8>();
110        $f::<u8, u16>();
111        $f::<u8, u32>();
112        $f::<u8, u64>();
113        $f::<u8, u128>();
114        $f::<u8, usize>();
115        $f::<u16, u8>();
116        $f::<u16, u16>();
117        $f::<u16, u32>();
118        $f::<u16, u64>();
119        $f::<u16, u128>();
120        $f::<u16, usize>();
121        $f::<u32, u8>();
122        $f::<u32, u16>();
123        $f::<u32, u32>();
124        $f::<u32, u64>();
125        $f::<u32, u128>();
126        $f::<u32, usize>();
127        $f::<u64, u8>();
128        $f::<u64, u16>();
129        $f::<u64, u32>();
130        $f::<u64, u64>();
131        $f::<u64, u128>();
132        $f::<u64, usize>();
133        $f::<u128, u8>();
134        $f::<u128, u16>();
135        $f::<u128, u32>();
136        $f::<u128, u64>();
137        $f::<u128, u128>();
138        $f::<u128, usize>();
139        $f::<usize, u8>();
140        $f::<usize, u16>();
141        $f::<usize, u32>();
142        $f::<usize, u64>();
143        $f::<usize, u128>();
144        $f::<usize, usize>();
145    };
146}
147
148#[doc(hidden)]
149#[macro_export]
150macro_rules! apply_fn_to_unsigneds_and_signeds {
151    ($f: ident) => {
152        $f::<u8, i8>();
153        $f::<u8, i16>();
154        $f::<u8, i32>();
155        $f::<u8, i64>();
156        $f::<u8, i128>();
157        $f::<u8, isize>();
158        $f::<u16, i8>();
159        $f::<u16, i16>();
160        $f::<u16, i32>();
161        $f::<u16, i64>();
162        $f::<u16, i128>();
163        $f::<u16, isize>();
164        $f::<u32, i8>();
165        $f::<u32, i16>();
166        $f::<u32, i32>();
167        $f::<u32, i64>();
168        $f::<u32, i128>();
169        $f::<u32, isize>();
170        $f::<u64, i8>();
171        $f::<u64, i16>();
172        $f::<u64, i32>();
173        $f::<u64, i64>();
174        $f::<u64, i128>();
175        $f::<u64, isize>();
176        $f::<u128, i8>();
177        $f::<u128, i16>();
178        $f::<u128, i32>();
179        $f::<u128, i64>();
180        $f::<u128, i128>();
181        $f::<u128, isize>();
182        $f::<usize, i8>();
183        $f::<usize, i16>();
184        $f::<usize, i32>();
185        $f::<usize, i64>();
186        $f::<usize, i128>();
187        $f::<usize, isize>();
188    };
189}
190
191#[doc(hidden)]
192#[macro_export]
193macro_rules! apply_fn_to_unsigneds_and_primitive_ints {
194    ($f: ident) => {
195        apply_fn_to_unsigneds_and_unsigneds!($f);
196        apply_fn_to_unsigneds_and_signeds!($f);
197    };
198}
199
200#[doc(hidden)]
201#[macro_export]
202macro_rules! apply_fn_to_unsigneds_and_unsigned_signed_pairs {
203    ($f: ident) => {
204        $f::<u8, u8, i8>();
205        $f::<u8, u16, i16>();
206        $f::<u8, u32, i32>();
207        $f::<u8, u64, i64>();
208        $f::<u8, u128, i128>();
209        $f::<u8, usize, isize>();
210        $f::<u16, u8, i8>();
211        $f::<u16, u16, i16>();
212        $f::<u16, u32, i32>();
213        $f::<u16, u64, i64>();
214        $f::<u16, u128, i128>();
215        $f::<u16, usize, isize>();
216        $f::<u32, u8, i8>();
217        $f::<u32, u16, i16>();
218        $f::<u32, u32, i32>();
219        $f::<u32, u64, i64>();
220        $f::<u32, u128, i128>();
221        $f::<u32, usize, isize>();
222        $f::<u64, u8, i8>();
223        $f::<u64, u16, i16>();
224        $f::<u64, u32, i32>();
225        $f::<u64, u64, i64>();
226        $f::<u64, u128, i128>();
227        $f::<u64, usize, isize>();
228        $f::<u128, u8, i8>();
229        $f::<u128, u16, i16>();
230        $f::<u128, u32, i32>();
231        $f::<u128, u64, i64>();
232        $f::<u128, u128, i128>();
233        $f::<u128, usize, isize>();
234        $f::<usize, u8, i8>();
235        $f::<usize, u16, i16>();
236        $f::<usize, u32, i32>();
237        $f::<usize, u64, i64>();
238        $f::<usize, u128, i128>();
239        $f::<usize, usize, isize>();
240    };
241}
242
243#[doc(hidden)]
244#[macro_export]
245macro_rules! apply_fn_to_unsigneds_and_primitive_floats {
246    ($f: ident) => {
247        $f::<u8, f32>();
248        $f::<u8, f64>();
249        $f::<u16, f32>();
250        $f::<u16, f64>();
251        $f::<u32, f32>();
252        $f::<u32, f64>();
253        $f::<u64, f32>();
254        $f::<u64, f64>();
255        $f::<u128, f32>();
256        $f::<u128, f64>();
257        $f::<usize, f32>();
258        $f::<usize, f64>();
259    };
260}
261
262#[doc(hidden)]
263#[macro_export]
264macro_rules! apply_fn_to_signeds_and_primitive_floats {
265    ($f: ident) => {
266        $f::<i8, f32>();
267        $f::<i8, f64>();
268        $f::<i16, f32>();
269        $f::<i16, f64>();
270        $f::<i32, f32>();
271        $f::<i32, f64>();
272        $f::<i64, f32>();
273        $f::<i64, f64>();
274        $f::<i128, f32>();
275        $f::<i128, f64>();
276        $f::<isize, f32>();
277        $f::<isize, f64>();
278    };
279}
280
281#[doc(hidden)]
282#[macro_export]
283macro_rules! apply_fn_to_primitive_ints_and_primitive_floats {
284    ($f: ident) => {
285        apply_fn_to_unsigneds_and_primitive_floats!($f);
286        apply_fn_to_signeds_and_primitive_floats!($f);
287    };
288}
289
290#[doc(hidden)]
291#[macro_export]
292macro_rules! apply_fn_to_primitive_floats_and_unsigneds {
293    ($f: ident) => {
294        $f::<f32, u8>();
295        $f::<f32, u16>();
296        $f::<f32, u32>();
297        $f::<f32, u64>();
298        $f::<f32, u128>();
299        $f::<f32, usize>();
300        $f::<f64, u8>();
301        $f::<f64, u16>();
302        $f::<f64, u32>();
303        $f::<f64, u64>();
304        $f::<f64, u128>();
305        $f::<f64, usize>();
306    };
307}
308
309#[doc(hidden)]
310#[macro_export]
311macro_rules! apply_fn_to_primitive_floats_and_signeds {
312    ($f: ident) => {
313        $f::<f32, i8>();
314        $f::<f32, i16>();
315        $f::<f32, i32>();
316        $f::<f32, i64>();
317        $f::<f32, i128>();
318        $f::<f32, isize>();
319        $f::<f64, i8>();
320        $f::<f64, i16>();
321        $f::<f64, i32>();
322        $f::<f64, i64>();
323        $f::<f64, i128>();
324        $f::<f64, isize>();
325    };
326}
327
328#[doc(hidden)]
329#[macro_export]
330macro_rules! apply_fn_to_primitive_floats_and_unsigned_signed_pairs {
331    ($f: ident) => {
332        $f::<f32, u8, i8>();
333        $f::<f32, u16, i16>();
334        $f::<f32, u32, i32>();
335        $f::<f32, u64, i64>();
336        $f::<f32, u128, i128>();
337        $f::<f32, usize, isize>();
338        $f::<f64, u8, i8>();
339        $f::<f64, u16, i16>();
340        $f::<f64, u32, i32>();
341        $f::<f64, u64, i64>();
342        $f::<f64, u128, i128>();
343        $f::<f64, usize, isize>();
344    };
345}
346
347#[doc(hidden)]
348#[macro_export]
349macro_rules! apply_fn_to_signeds_and_unsigneds {
350    ($f: ident) => {
351        $f::<i8, u8>();
352        $f::<i8, u16>();
353        $f::<i8, u32>();
354        $f::<i8, u64>();
355        $f::<i8, u128>();
356        $f::<i8, usize>();
357        $f::<i16, u8>();
358        $f::<i16, u16>();
359        $f::<i16, u32>();
360        $f::<i16, u64>();
361        $f::<i16, u128>();
362        $f::<i16, usize>();
363        $f::<i32, u8>();
364        $f::<i32, u16>();
365        $f::<i32, u32>();
366        $f::<i32, u64>();
367        $f::<i32, u128>();
368        $f::<i32, usize>();
369        $f::<i64, u8>();
370        $f::<i64, u16>();
371        $f::<i64, u32>();
372        $f::<i64, u64>();
373        $f::<i64, u128>();
374        $f::<i64, usize>();
375        $f::<i128, u8>();
376        $f::<i128, u16>();
377        $f::<i128, u32>();
378        $f::<i128, u64>();
379        $f::<i128, u128>();
380        $f::<i128, usize>();
381        $f::<isize, u8>();
382        $f::<isize, u16>();
383        $f::<isize, u32>();
384        $f::<isize, u64>();
385        $f::<isize, u128>();
386        $f::<isize, usize>();
387    };
388}
389
390#[doc(hidden)]
391#[macro_export]
392macro_rules! apply_fn_to_signeds_and_signeds {
393    ($f: ident) => {
394        $f::<i8, i8>();
395        $f::<i8, i16>();
396        $f::<i8, i32>();
397        $f::<i8, i64>();
398        $f::<i8, i128>();
399        $f::<i8, isize>();
400        $f::<i16, i8>();
401        $f::<i16, i16>();
402        $f::<i16, i32>();
403        $f::<i16, i64>();
404        $f::<i16, i128>();
405        $f::<i16, isize>();
406        $f::<i32, i8>();
407        $f::<i32, i16>();
408        $f::<i32, i32>();
409        $f::<i32, i64>();
410        $f::<i32, i128>();
411        $f::<i32, isize>();
412        $f::<i64, i8>();
413        $f::<i64, i16>();
414        $f::<i64, i32>();
415        $f::<i64, i64>();
416        $f::<i64, i128>();
417        $f::<i64, isize>();
418        $f::<i128, i8>();
419        $f::<i128, i16>();
420        $f::<i128, i32>();
421        $f::<i128, i64>();
422        $f::<i128, i128>();
423        $f::<i128, isize>();
424        $f::<isize, i8>();
425        $f::<isize, i16>();
426        $f::<isize, i32>();
427        $f::<isize, i64>();
428        $f::<isize, i128>();
429        $f::<isize, isize>();
430    };
431}
432
433#[doc(hidden)]
434#[macro_export]
435macro_rules! apply_fn_to_primitive_ints_and_unsigneds {
436    ($f: ident) => {
437        apply_fn_to_unsigneds_and_unsigneds!($f);
438        apply_fn_to_signeds_and_unsigneds!($f);
439    };
440}
441
442#[doc(hidden)]
443#[macro_export]
444macro_rules! apply_fn_to_primitive_ints_and_signeds {
445    ($f: ident) => {
446        apply_fn_to_unsigneds_and_signeds!($f);
447        apply_fn_to_signeds_and_signeds!($f);
448    };
449}
450
451#[doc(hidden)]
452#[macro_export]
453macro_rules! apply_fn_to_primitive_ints_and_primitive_ints {
454    ($f: ident) => {
455        apply_fn_to_primitive_ints_and_unsigneds!($f);
456        apply_fn_to_primitive_ints_and_signeds!($f);
457    };
458}
459
460#[doc(hidden)]
461#[macro_export]
462macro_rules! apply_to_primitive_floats {
463    ($m: tt) => {
464        $m!(f32);
465        $m!(f64);
466    };
467}
468
469#[doc(hidden)]
470#[macro_export]
471macro_rules! apply_to_primitive_float_unsigned_pairs {
472    ($m: tt) => {
473        $m!(f32, u32);
474        $m!(f64, u64);
475    };
476}
477
478#[doc(hidden)]
479#[macro_export]
480macro_rules! apply_fn_to_primitive_floats {
481    ($f: ident) => {
482        $f::<f32>();
483        $f::<f64>();
484    };
485}