123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610 |
- #ifndef ZEPHYR_INCLUDE_SYS_UTIL_MACROS_H_
- #define ZEPHYR_INCLUDE_SYS_UTIL_MACROS_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <sys/util_internal.h>
- #ifndef BIT
- #if defined(_ASMLANGUAGE)
- #define BIT(n) (1 << (n))
- #else
- #define BIT(n) (1UL << (n))
- #endif
- #endif
- #define BIT64(_n) (1ULL << (_n))
- #define WRITE_BIT(var, bit, set) \
- ((var) = (set) ? ((var) | BIT(bit)) : ((var) & ~BIT(bit)))
- #define BIT_MASK(n) (BIT(n) - 1UL)
- #define BIT64_MASK(n) (BIT64(n) - 1ULL)
- #define IS_ENABLED(config_macro) Z_IS_ENABLED1(config_macro)
- #define COND_CODE_1(_flag, _if_1_code, _else_code) \
- Z_COND_CODE_1(_flag, _if_1_code, _else_code)
- #define COND_CODE_0(_flag, _if_0_code, _else_code) \
- Z_COND_CODE_0(_flag, _if_0_code, _else_code)
- #define IF_ENABLED(_flag, _code) \
- COND_CODE_1(_flag, _code, ())
- #define IS_EMPTY(a) Z_IS_EMPTY_(a, 1, 0,)
- #define LIST_DROP_EMPTY(...) \
- Z_LIST_DROP_FIRST(FOR_EACH(Z_LIST_NO_EMPTIES, (), __VA_ARGS__))
- #define EMPTY
- #define IDENTITY(V) V
- #define GET_ARG_N(N, ...) Z_GET_ARG_##N(__VA_ARGS__)
- #define GET_ARGS_LESS_N(N, ...) Z_GET_ARGS_LESS_##N(__VA_ARGS__)
- #define UTIL_OR(a, b) COND_CODE_1(UTIL_BOOL(a), (a), (b))
- #define UTIL_AND(a, b) COND_CODE_1(UTIL_BOOL(a), (b), (0))
- #define UTIL_LISTIFY(LEN, F, ...) UTIL_CAT(Z_UTIL_LISTIFY_, LEN)(F, __VA_ARGS__)
- #define FOR_EACH(F, sep, ...) \
- Z_FOR_EACH(F, sep, REVERSE_ARGS(__VA_ARGS__))
- #define FOR_EACH_NONEMPTY_TERM(F, term, ...) \
- COND_CODE_0( \
- \
- NUM_VA_ARGS_LESS_1(LIST_DROP_EMPTY(__VA_ARGS__, _)), \
- \
- (), \
- \
- ( \
- FOR_EACH(F, term, LIST_DROP_EMPTY(__VA_ARGS__)) \
- \
- __DEBRACKET term \
- ))
- #define FOR_EACH_IDX(F, sep, ...) \
- Z_FOR_EACH_IDX(F, sep, REVERSE_ARGS(__VA_ARGS__))
- #define FOR_EACH_FIXED_ARG(F, sep, fixed_arg, ...) \
- Z_FOR_EACH_FIXED_ARG(F, sep, fixed_arg, REVERSE_ARGS(__VA_ARGS__))
- #define FOR_EACH_IDX_FIXED_ARG(F, sep, fixed_arg, ...) \
- Z_FOR_EACH_IDX_FIXED_ARG(F, sep, fixed_arg, REVERSE_ARGS(__VA_ARGS__))
- #define REVERSE_ARGS(...) \
- Z_FOR_EACH_ENGINE(Z_FOR_EACH_EXEC, (,), Z_BYPASS, _, __VA_ARGS__)
- #define NUM_VA_ARGS_LESS_1(...) \
- NUM_VA_ARGS_LESS_1_IMPL(__VA_ARGS__, 63, 62, 61, \
- 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, \
- 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, \
- 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, \
- 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, \
- 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, \
- 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, ~)
- #define MACRO_MAP_CAT(...) MACRO_MAP_CAT_(__VA_ARGS__)
- #define MACRO_MAP_CAT_N(N, ...) MACRO_MAP_CAT_N_(N, __VA_ARGS__)
- #ifdef __cplusplus
- }
- #endif
- #endif
|