PER Firmware
Loading...
Searching...
No Matches
min.h
Go to the documentation of this file.
1#ifndef MIN_H
2#define MIN_H
3
15[[gnu::always_inline]]
16static inline signed int min2_signed(signed int a, signed int b) {
17 return (a < b) ? a : b;
18}
19
20[[gnu::always_inline]]
21static inline unsigned int min2_unsigned(unsigned int a, unsigned int b) {
22 return (a < b) ? a : b;
23}
24
25[[gnu::always_inline]]
26static inline float min2_float(float a, float b) {
27 return (a < b) ? a : b;
28}
29
30#define MINOF2(a, b) _Generic((a) + (b), \
31 signed int: min2_signed, \
32 unsigned int: min2_unsigned, \
33 float: min2_float \
34)(a, b)
35
36#define MINOF3(a, b, c) MINOF2(MINOF2(a, b), c)
37#define MINOF4(a, b, c, d) MINOF2(MINOF2(a, b), MINOF2(c, d))
38// if you need more than four arguments, just add them here
39
40// dispatcher macro selects the correct MINOF function based on the number of arguments
41#define DISPATCH_MINOF(_1, _2, _3, _4, NAME, ...) NAME
42#define MINOF(...) DISPATCH_MINOF(__VA_ARGS__, MINOF4, MINOF3, MINOF2)(__VA_ARGS__)
43
44#endif // MIN_H