From 90b0b26048000837702c85e4a354781ede69561f Mon Sep 17 00:00:00 2001 From: Reece Date: Sun, 30 Jan 2022 02:37:56 +0000 Subject: [PATCH] [*] Unpollute AUE_ macro prefix --- Include/AuroraEnum.hpp | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/Include/AuroraEnum.hpp b/Include/AuroraEnum.hpp index 357cc19..3df70b7 100644 --- a/Include/AuroraEnum.hpp +++ b/Include/AuroraEnum.hpp @@ -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(name::kEnumCount)] = { AU_FOR_EACH(AUE_EMIT_A, AUE_STRIP_BRACKETS(vals)) }; \ - static inline const name k ## name ## Values[static_cast(name::kEnumCount)] = { AU_FOR_EACH_THAT(AUE_EMIT_D, name, AUE_STRIP_BRACKETS(vals)) }; \ - inline const AuHashMap 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(name::kEnumCount)] = { AU_FOR_EACH(_AUE_EMIT_A, _AUE_STRIP_BRACKETS(vals)) }; \ + static inline const name k ## name ## Values[static_cast(name::kEnumCount)] = { AU_FOR_EACH_THAT(_AUE_EMIT_D, name, _AUE_STRIP_BRACKETS(vals)) }; \ + inline const AuHashMap 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(val) >= static_cast(name::kEnumCount)) return invalid; return k ## name ## ToString[static_cast(val)]; } \ static inline bool name ## IsValid(name val) { return static_cast(val) < static_cast(name::kEnumCount); } \ - static inline void name ## ForEach(const AuConsumer &consumer) { AU_FOR_EACH_THAT(AUE_EMIT_CALL, name, AUE_STRIP_BRACKETS(vals)) } \ + static inline void name ## ForEach(const AuConsumer &consumer) { AU_FOR_EACH_THAT(_AUE_EMIT_CALL, name, _AUE_STRIP_BRACKETS(vals)) } \ static const AuUInt k ## name ## Count = static_cast(name::kEnumCount); \ static const name k ## name ## Invalid = name::kEnumCount; \ static const name k ## name ## MaxLegal = static_cast(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(name::kEnumCount)] = { AU_FOR_EACH(AUE_EMIT_A, AUE_STRIP_BRACKETS(vals)) }; \ - static inline const name k ## name ## Values[static_cast(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(name::kEnumCount)] = { AU_FOR_EACH(_AUE_EMIT_A, _AUE_STRIP_BRACKETS(vals)) }; \ + static inline const name k ## name ## Values[static_cast(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(val) >= static_cast(name::kEnumCount)) return invalid; return k ## name ## ToString[static_cast(val)]; } \ static inline bool name ## IsValid(name val) { return static_cast(val) < static_cast(name::kEnumCount); } \ static const AuUInt k ## name ## Count = static_cast(name::kEnumCount); \