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) \
38
inline 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
lib
utility
include
qx
utility
qx-macros.h
Generated by
1.13.2