diff --git a/Include/AuroraEnum.hpp b/Include/AuroraEnum.hpp index aacc336..41e55f7 100644 --- a/Include/AuroraEnum.hpp +++ b/Include/AuroraEnum.hpp @@ -7,6 +7,21 @@ ***/ #pragma once +#if defined(AUE_OUT_OF_ECOSYSTEM) + +#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 + +#endif + /////////////////////////////////////////////////////////////////////////////////////////// /// Utilities /////////////////////////////////////////////////////////////////////////////////////////// @@ -46,6 +61,6 @@ static inline const AuString k ## name ## ToString[static_cast(name::kEnumCount)] = {AU_FOR_EACH_FIRST(AUE_EMIT_A, AUE_EMIT_B, AUE_STRIP_BRACKETS(vals)) }; \ inline const AuHashMap kName ## 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) { const name *val; if (!AuTryFind(kName ## FromString, codename, val)) return name::kEnumCount; return *val; } \ + static inline name name ## FromHashString(const AuString &codename) { auto itr = kName ## FromString.find(codename); if (itr == kName ## 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 void name ## ForEach(const AuConsumer &consumer) { AU_FOR_EACH_THAT(AUE_EMIT_CALL, name, AUE_STRIP_BRACKETS(vals)) } \ No newline at end of file