From 0fcca45387653c3fb40350d30b9244b09873daa3 Mon Sep 17 00:00:00 2001 From: Reece Date: Fri, 19 Nov 2021 14:38:03 +0000 Subject: [PATCH] [+] Added AUE_NOCPPSTL configuration macro. Scriptability will and kernel drivers shouldn't (but probably will) depend no a nostl assumption --- Include/AuroraEnum.hpp | 63 +++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/Include/AuroraEnum.hpp b/Include/AuroraEnum.hpp index e0596d6..357cc19 100644 --- a/Include/AuroraEnum.hpp +++ b/Include/AuroraEnum.hpp @@ -13,31 +13,33 @@ #if defined(AUE_OUT_OF_ECOSYSTEM) -#include -#include -#include + #if !defined(AUE_NOCPPSTL) + #include + #include + #include -#if !defined(AU_AuHashMap) -#define AU_AuHashMap -template -using AuHashMap = std::unordered_map; -#endif + #if !defined(AU_AuHashMap) + #define AU_AuHashMap + template + using AuHashMap = std::unordered_map; + #endif -#if !defined(AU_AuString) -#define AU_AuString -using AuString = std::string; -#endif + #if !defined(AU_AuString) + #define AU_AuString + using AuString = std::string; + #endif -#if !defined(AU_UInt) -#define AU_UInt -using AuUInt = size_t; -#endif + #if !defined(AU_AuConsumer) + #define AU_AuConsumer + template + using AuConsumer = std::function; + #endif + #endif -#if !defined(AU_Consumer) -#define AU_Consumer -template -using AuConsumer = std::function; -#endif + #if !defined(AU_AuUInt) + #define AU_AuUInt + using AuUInt = size_t; + #endif #endif @@ -90,4 +92,21 @@ using AuConsumer = std::function; static const name k ## name ## MaxLegal = static_cast(k ## name ## Count - 1); \ static const name k ## name ## MinLegal = static_cast(0); -#define AUE_ITERATE(name, index) name index = static_cast(0); static_cast(index) < static_cast(name::kEnumCount); index = static_cast(static_cast(index) + 1) \ No newline at end of file +#define AUE_ITERATE(name, index) name index = static_cast(0); static_cast(index) < static_cast(name::kEnumCount); index = static_cast(static_cast(index) + 1) + +/////////////////////////////////////////////////////////////////////////////////////////// +// Limited support for when there is no STL or STL-like library available +/////////////////////////////////////////////////////////////////////////////////////////// + +#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)) }; \ + 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); \ + static const name k ## name ## Invalid = name::kEnumCount; \ + static const name k ## name ## MaxLegal = static_cast(k ## name ## Count - 1); \ + static const name k ## name ## MinLegal = static_cast(0); +#endif \ No newline at end of file