|
31 | 31 | // helper |
32 | 32 | #define _EXT_LOG_SELECT5TH_PARAMETER(_1, _2, _3, _4, NAME, ...) NAME |
33 | 33 |
|
| 34 | +// __VA_ARGS__ do not expand correctly when using VisualStudio compiler :( |
| 35 | +// https://stackoverflow.com/questions/5134523/msvc-doesnt-expand-va-args-correctly |
| 36 | +#define _EXT_LOG_EXPAND(x) x |
34 | 37 |
|
35 | 38 | // variable logging - if() ... |
36 | | -#define _EXT_LOG_INTERNAL(id_, topic_, macro_level_, cond_) \ |
| 39 | +#define _EXT_LOG_INTERNAL(id_, topic_, macro_level_, cond_) \ |
37 | 40 | if (ext::logging::_detail::variable_level_is_active((macro_level_), (topic_)) && cond_) \ |
38 | 41 | ext::logging::_detail::logger(id_, (topic_), (macro_level_), __FILE__, __LINE__, __FUNCTION__) |
39 | 42 |
|
|
48 | 51 | // 1st __VA_ARGS__ shifts the args into the correct position |
49 | 52 | // macro can not be empty because of the leading `,` (fixed with __VA_OPT__ in c++20) |
50 | 53 | #ifdef EXT_COMPILER_VC |
51 | | - // __VA_ARGS__ does not expand on VisualStudio compiler :( |
52 | | - #define _EXT_LOG_EXPAND(x) x |
53 | | - #define EXT_LOGVARIABLE(...) \ |
54 | | - _EXT_LOG_SELECT5TH_PARAMETER(_EXT_LOG_EXPAND(__VA_ARGS__), EXT_LOGVARIABLE4, EXT_LOGVARIABLE3, EXT_LOGVARIABLE2, EXT_LOGVARIABLE1, ) \ |
| 54 | + #define EXT_LOGVARIABLE(...) \ |
| 55 | + _EXT_LOG_SELECT5TH_PARAMETER( \ |
| 56 | + _EXT_LOG_EXPAND(__VA_ARGS__), EXT_LOGVARIABLE4, EXT_LOGVARIABLE3, EXT_LOGVARIABLE2, EXT_LOGVARIABLE1, ) \ |
55 | 57 | (_EXT_LOG_EXPAND(__VA_ARGS__)) |
56 | 58 | #else |
57 | | - #define EXT_LOGVARIABLE(...) \ |
58 | | - _EXT_LOG_SELECT5TH_PARAMETER(__VA_ARGS__, EXT_LOGVARIABLE4, EXT_LOGVARIABLE3, EXT_LOGVARIABLE2, EXT_LOGVARIABLE1, ) \ |
| 59 | + #define EXT_LOGVARIABLE(...) \ |
| 60 | + _EXT_LOG_SELECT5TH_PARAMETER( \ |
| 61 | + __VA_ARGS__, EXT_LOGVARIABLE4, EXT_LOGVARIABLE3, EXT_LOGVARIABLE2, EXT_LOGVARIABLE1, ) \ |
59 | 62 | (__VA_ARGS__) |
60 | 63 | #endif // EXT_COMPILER_VC |
61 | 64 |
|
|
64 | 67 | #define EXT_LOG EXT_LOGVARIABLE |
65 | 68 |
|
66 | 69 |
|
67 | | -// This is still a bit experimental: |
68 | | -// constexpr if() does not seem to work in a macro is there some way that guarantees the evaluation |
69 | | -// at compile time. Otherwise it would be better to remove this code in order to reduce the complexity. |
70 | | - |
71 | | -#define _EXT_LOG_INTERNAL_CONST(id_, topic_, macro_level_, cond_) \ |
72 | | - if constexpr (ext::logging::_detail::constexpr_level_is_active(macro_level_) && cond_) \ |
73 | | - ext::logging::_detail::logger(id_, (topic_), (macro_level_), __FILE__, __LINE__, __FUNCTION__) |
| 70 | +// variable logging - if constexpr() ... |
| 71 | +#define _EXT_LOG_INTERNAL_CONST(id_, topic_, macro_level_, cond_) \ |
| 72 | + if constexpr (ext::logging::_detail::constexpr_level_is_active(macro_level_) && cond_) \ |
| 73 | + ext::logging::_detail::logger(id_, (topic_), (macro_level_), __FILE__, __LINE__, __FUNCTION__) |
74 | 74 |
|
75 | 75 | #define _EXT_LOG_INTERNAL_ADD_PREFIX_CONST(id_, topic_, macro_level_, cond_) \ |
76 | 76 | _EXT_LOG_INTERNAL_CONST(id_, (ext::logging::topic::topic_), (ext::logging::level::macro_level_), cond_) |
|
81 | 81 | #define EXT_LOGCONST1(id) _EXT_LOG_INTERNAL_ADD_PREFIX_CONST(id, no_topic, EXT_LOGGING_DEFAULT_LEVEL, true) |
82 | 82 |
|
83 | 83 | #ifdef EXT_COMPILER_VC |
84 | | - #define _EXT_LOG_EXPAND(x) x |
85 | | - #define EXT_LOGCONST(...) \ |
86 | | - _EXT_LOG_SELECT5TH_PARAMETER(_EXT_LOG_EXPAND(__VA_ARGS__), EXT_LOGCONST4, EXT_LOGCONST3, EXT_LOGCONST2, EXT_LOGCONST1, ) \ |
| 84 | + #define EXT_LOGCONST(...) \ |
| 85 | + _EXT_LOG_SELECT5TH_PARAMETER( \ |
| 86 | + _EXT_LOG_EXPAND(__VA_ARGS__), EXT_LOGCONST4, EXT_LOGCONST3, EXT_LOGCONST2, EXT_LOGCONST1, ) \ |
87 | 87 | (_EXT_LOG_EXPAND(__VA_ARGS__)) |
88 | 88 | #else |
89 | | - #define EXT_LOGCONST(...) \ |
| 89 | + #define EXT_LOGCONST(...) \ |
90 | 90 | _EXT_LOG_SELECT5TH_PARAMETER(__VA_ARGS__, EXT_LOGCONST4, EXT_LOGCONST3, EXT_LOGCONST2, EXT_LOGCONST1, ) \ |
91 | 91 | (__VA_ARGS__) |
92 | 92 | #endif // EXT_COMPILER_VC |
|
0 commit comments