Qx v0.7
Qt Extensions Library
Loading...
Searching...
No Matches
qx-macros.h
Go to the documentation of this file.
1#ifndef QX_MACROS_H
2#define QX_MACROS_H
3
4// Helper
6#define __QX_MACRO_EXPAND1(...) __VA_ARGS__
7#define __QX_MACRO_EXPAND2(...) __QX_MACRO_EXPAND1(__QX_MACRO_EXPAND1(__VA_ARGS__))
8#define __QX_MACRO_EXPAND4(...) __QX_MACRO_EXPAND2(__QX_MACRO_EXPAND2(__VA_ARGS__))
9#define __QX_MACRO_EXPAND8(...) __QX_MACRO_EXPAND4(__QX_MACRO_EXPAND4(__VA_ARGS__))
10#define __QX_MACRO_EXPAND16(...) __QX_MACRO_EXPAND8(__QX_MACRO_EXPAND8(__VA_ARGS__))
11#define __QX_MACRO_EXPAND32(...) __QX_MACRO_EXPAND16(__QX_MACRO_EXPAND16(__VA_ARGS__))
12#define __QX_MACRO_EXPAND64(...) __QX_MACRO_EXPAND32(__QX_MACRO_EXPAND32(__VA_ARGS__))
13#define __QX_MACRO_EXPAND128(...) __QX_MACRO_EXPAND64(__QX_MACRO_EXPAND64(__VA_ARGS__))
14#define __QX_MACRO_EXPAND256(...) __QX_MACRO_EXPAND128(__QX_MACRO_EXPAND128(__VA_ARGS__))
15#define __QX_MACRO_EVALUATE(...) __QX_MACRO_EXPAND256(__VA_ARGS__)
16
17#define __QX_MACRO_CALL ()
18
19#define __QX_FOR_EACH_NEXT() __QX_FOR_EACH_APPLY_AND_ITERATE
20#define __QX_FOR_EACH_NEXT_DELIM() __QX_FOR_EACH_APPLY_AND_ITERATE_DELIM
21#define __QX_EVAL_EACH_NEXT() __QX_EVAL_EACH_APPLY_AND_ITERATE
22
23#define __QX_FOR_EACH_APPLY_AND_ITERATE(macro, first, ...) \
24 macro(first) \
25 __VA_OPT__(__QX_FOR_EACH_NEXT __QX_MACRO_CALL (macro, __VA_ARGS__))
26
27#define __QX_FOR_EACH_APPLY_AND_ITERATE_DELIM(macro, first, ...) \
28 macro(first) \
29 __VA_OPT__(, __QX_FOR_EACH_NEXT_DELIM __QX_MACRO_CALL (macro, __VA_ARGS__))
30
31#define __QX_EVAL_EACH_APPLY_AND_ITERATE(arg, first, ...) \
32 first(arg) \
33 __VA_OPT__(__QX_EVAL_EACH_NEXT __QX_MACRO_CALL (arg, __VA_ARGS__))
35
36// User
37#define QX_SCOPED_ENUM_HASH_FUNC(T) \
38inline size_t qHash(const T& t, size_t seed) { \
39 return ::qHash(static_cast<typename std::underlying_type<T>::type>(t), seed); \
40}
41
42#define QSL QStringLiteral
43#define QBAL QByteArrayLiteral
44
45#define QX_FOR_EACH(macro, ...) \
46 __VA_OPT__(__QX_MACRO_EVALUATE(__QX_FOR_EACH_APPLY_AND_ITERATE(macro, __VA_ARGS__)))
47
48#define QX_FOR_EACH_DELIM(macro, ...) \
49 __VA_OPT__(__QX_MACRO_EVALUATE(__QX_FOR_EACH_APPLY_AND_ITERATE_DELIM(macro, __VA_ARGS__)))
50
51#define QX_EVAL_EACH(arg, ...) \
52 __VA_OPT__(__QX_MACRO_EVALUATE(__QX_EVAL_EACH_APPLY_AND_ITERATE(arg, __VA_ARGS__)))
53
54#endif // QX_MACROS_H