[*] Unpollute AUE_ macro prefix
This commit is contained in:
parent
0fcca45387
commit
90b0b26048
@ -48,45 +48,46 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/// @hideinitializer
|
||||
#define AUE_BRACKET_SCOPE(...) __VA_ARGS__
|
||||
#define _AUE_BRACKET_SCOPE(...) __VA_ARGS__
|
||||
|
||||
/// @hideinitializer
|
||||
#define AUE_STRIP_BRACKETS_(X) X
|
||||
#define __AUE_STRIP_BRACKETS(X) X
|
||||
|
||||
/// @hideinitializer
|
||||
#define AUE_STRIP_BRACKETS(X) AUE_STRIP_BRACKETS_(AUE_BRACKET_SCOPE X)
|
||||
#define _AUE_STRIP_BRACKETS(X) __AUE_STRIP_BRACKETS(_AUE_BRACKET_SCOPE X)
|
||||
|
||||
/// @hideinitializer
|
||||
#define AUE_EMIT_ARRAY(val) val,
|
||||
#define _AUE_EMIT_ARRAY(val) val,
|
||||
|
||||
/// @hideinitializer
|
||||
#define AUE_EMIT_A(val) #val,
|
||||
#define _AUE_EMIT_A(val) #val,
|
||||
|
||||
/// @hideinitializer
|
||||
#define AUE_EMIT_D(name, val) name::val,
|
||||
#define _AUE_EMIT_D(name, val) name::val,
|
||||
|
||||
/// @hideinitializer
|
||||
#define AUE_EMIT_PAIRNAME(name, val) {#val, name::val},
|
||||
#define _AUE_EMIT_PAIRNAME(name, val) {#val, name::val},
|
||||
|
||||
/// @hideinitializer
|
||||
#define AUE_EMIT_CALL(name, val) consumer(name::val);
|
||||
#define _AUE_EMIT_CALL(name, val) consumer(name::val);
|
||||
|
||||
/// @hideinitializer
|
||||
#define AUE_EMIT_CHECK(name, val) if (codename == #val) {return name::val;}
|
||||
#define _AUE_EMIT_CHECK(name, val) if (codename == #val) {return name::val;}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// API
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
#define AUE_DEFINE_VA(name, ...) AUE_DEFINE(name, (__VA_ARGS__))
|
||||
|
||||
#define AUE_DEFINE(name, vals) enum class name { AU_FOR_EACH(AUE_EMIT_ARRAY, AUE_STRIP_BRACKETS(vals)) kEnumCount }; \
|
||||
static inline const AuString k ## name ## ToString[static_cast<AuUInt>(name::kEnumCount)] = { AU_FOR_EACH(AUE_EMIT_A, AUE_STRIP_BRACKETS(vals)) }; \
|
||||
static inline const name k ## name ## Values[static_cast<AuUInt>(name::kEnumCount)] = { AU_FOR_EACH_THAT(AUE_EMIT_D, name, AUE_STRIP_BRACKETS(vals)) }; \
|
||||
inline const AuHashMap<AuString, name> k ## name ## FromString = { AU_FOR_EACH_THAT(AUE_EMIT_PAIRNAME, name, AUE_STRIP_BRACKETS(vals)) {"kEnumCount", name::kEnumCount} }; \
|
||||
static inline name name ## FromString (const AuString &codename) { AU_FOR_EACH_THAT(AUE_EMIT_CHECK, name, AUE_STRIP_BRACKETS(vals)) return name::kEnumCount; } \
|
||||
#define AUE_DEFINE(name, vals) enum class name { AU_FOR_EACH(_AUE_EMIT_ARRAY, _AUE_STRIP_BRACKETS(vals)) kEnumCount, kEnumInvalid = -1, eEnumInvalid = -1, eEnumCount = kEnumCount }; \
|
||||
static inline const AuString k ## name ## ToString[static_cast<AuUInt>(name::kEnumCount)] = { AU_FOR_EACH(_AUE_EMIT_A, _AUE_STRIP_BRACKETS(vals)) }; \
|
||||
static inline const name k ## name ## Values[static_cast<AuUInt>(name::kEnumCount)] = { AU_FOR_EACH_THAT(_AUE_EMIT_D, name, _AUE_STRIP_BRACKETS(vals)) }; \
|
||||
inline const AuHashMap<AuString, name> k ## name ## FromString = { AU_FOR_EACH_THAT(_AUE_EMIT_PAIRNAME, name, _AUE_STRIP_BRACKETS(vals)) {"kEnumCount", name::kEnumCount} }; \
|
||||
static inline name name ## FromString (const AuString &codename) { AU_FOR_EACH_THAT(_AUE_EMIT_CHECK, name, _AUE_STRIP_BRACKETS(vals)) return name::kEnumCount; } \
|
||||
static inline name name ## FromHashString(const AuString &codename) { auto itr = k ## name ## FromString.find(codename); if (itr == k ## name ## FromString.end()) return name::kEnumCount; return itr->second; } \
|
||||
static inline const AuString & name ## ToString(name val) { static const AuString invalid = "kEnumCount"; if (static_cast<AuUInt>(val) >= static_cast<AuUInt>(name::kEnumCount)) return invalid; return k ## name ## ToString[static_cast<AuUInt>(val)]; } \
|
||||
static inline bool name ## IsValid(name val) { return static_cast<AuUInt>(val) < static_cast<AuUInt>(name::kEnumCount); } \
|
||||
static inline void name ## ForEach(const AuConsumer<name> &consumer) { AU_FOR_EACH_THAT(AUE_EMIT_CALL, name, AUE_STRIP_BRACKETS(vals)) } \
|
||||
static inline void name ## ForEach(const AuConsumer<name> &consumer) { AU_FOR_EACH_THAT(_AUE_EMIT_CALL, name, _AUE_STRIP_BRACKETS(vals)) } \
|
||||
static const AuUInt k ## name ## Count = static_cast<AuUInt>(name::kEnumCount); \
|
||||
static const name k ## name ## Invalid = name::kEnumCount; \
|
||||
static const name k ## name ## MaxLegal = static_cast<name>(k ## name ## Count - 1); \
|
||||
@ -100,9 +101,9 @@
|
||||
|
||||
#if defined(AUE_NOCPPSTL)
|
||||
#undef AUE_DEFINE
|
||||
#define AUE_DEFINE(name, vals) enum class name { AU_FOR_EACH(AUE_EMIT_ARRAY, AUE_STRIP_BRACKETS(vals)) kEnumCount }; \
|
||||
static inline const char * k ## name ## ToString[static_cast<AuUInt>(name::kEnumCount)] = { AU_FOR_EACH(AUE_EMIT_A, AUE_STRIP_BRACKETS(vals)) }; \
|
||||
static inline const name k ## name ## Values[static_cast<AuUInt>(name::kEnumCount)] = { AU_FOR_EACH_THAT(AUE_EMIT_D, name, AUE_STRIP_BRACKETS(vals)) }; \
|
||||
#define AUE_DEFINE(name, vals) enum class name { AU_FOR_EACH(_AUE_EMIT_ARRAY, _AUE_STRIP_BRACKETS(vals)) kEnumCount, kEnumInvalid = -1, eEnumInvalid = -1, eEnumCount = kEnumCount }; \
|
||||
static inline const char * k ## name ## ToString[static_cast<AuUInt>(name::kEnumCount)] = { AU_FOR_EACH(_AUE_EMIT_A, _AUE_STRIP_BRACKETS(vals)) }; \
|
||||
static inline const name k ## name ## Values[static_cast<AuUInt>(name::kEnumCount)] = { AU_FOR_EACH_THAT(_AUE_EMIT_D, name, _AUE_STRIP_BRACKETS(vals)) }; \
|
||||
static inline const char * name ## ToString(name val) { static const char * invalid = "kEnumCount"; if (static_cast<AuUInt>(val) >= static_cast<AuUInt>(name::kEnumCount)) return invalid; return k ## name ## ToString[static_cast<AuUInt>(val)]; } \
|
||||
static inline bool name ## IsValid(name val) { return static_cast<AuUInt>(val) < static_cast<AuUInt>(name::kEnumCount); } \
|
||||
static const AuUInt k ## name ## Count = static_cast<AuUInt>(name::kEnumCount); \
|
||||
|
Loading…
Reference in New Issue
Block a user