From fb1935fa915c280de61e06e953b09c8021543b41 Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Sat, 20 Apr 2024 01:35:00 +0100 Subject: [PATCH] [*] This should be a string view --- Include/AuroraEnum.hpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Include/AuroraEnum.hpp b/Include/AuroraEnum.hpp index ef9bb45..a9dc15f 100644 --- a/Include/AuroraEnum.hpp +++ b/Include/AuroraEnum.hpp @@ -32,6 +32,10 @@ using AuString = std::string; #endif + #if !defined(AU_AuROString) + #define AU_AuROString + using AuROString = std::string_view; + #endif #endif #if !defined(AU_AuUInt) @@ -81,6 +85,11 @@ #define _AUE_EMIT_CCHECK(name, val) if (strcmp(#val, codename) == 0) { return k ## name ## val; } #endif +#if !defined(_AUE_DISABLE_STRING_VIEWS) && !defined(AU_LANG_CPP_14) && !defined(AU_LANG_CPP_17) + #define _AUE_STRING_VIEW AuROString +#else + #define _AUE_STRING_VIEW AuString +#endif /////////////////////////////////////////////////////////////////////////////////////////// // API @@ -116,8 +125,8 @@ inline const AuString k ## name ## ToString[static_cast(name::kEnumCount)] = {AU_FOR_EACH(_AUE_EMIT_A, _AUE_STRIP_BRACKETS(vals))}; \ 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)) { "kEnumInvalid", name::kEnumCount }}; \ - inline name name ## FromString(const AuString & codename) { AU_FOR_EACH_THAT(_AUE_EMIT_CHECK, name, _AUE_STRIP_BRACKETS(vals)) return name::kEnumInvalid; } \ - inline name name ## FromHashString(const AuString & codename) { auto itr = k ## name ## FromString.find(codename); if (itr == k ## name ## FromString.end()) return name::kEnumInvalid; return itr->second; } \ + inline name name ## FromString(const _AUE_STRING_VIEW & codename) { AU_FOR_EACH_THAT(_AUE_EMIT_CHECK, name, _AUE_STRIP_BRACKETS(vals)) return name::kEnumInvalid; } \ + inline name name ## FromHashString(const _AUE_STRING_VIEW & codename) { auto itr = k ## name ## FromString.find(codename); if (itr == k ## name ## FromString.end()) return name::kEnumInvalid; return itr->second; } \ inline const AuString &name ## ToString(name val) { static const AuString invalid = "kEnumInvalid"; if (static_cast(val) >= static_cast(name::kEnumCount)) return invalid; return k ## name ## ToString[static_cast(val)]; } \ inline bool name ## IsValid(name val) { return static_cast(val) < static_cast(name::kEnumCount); } \ template \