From d5e8530191c41416bfdfbe4ffb3d7a39f09f8fbe Mon Sep 17 00:00:00 2001 From: Anton Shalgachev Date: Tue, 20 Dec 2022 10:24:01 +0100 Subject: [PATCH] simplify pretty_name to speed up constexpr evaluation (#227) --- include/magic_enum.hpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/include/magic_enum.hpp b/include/magic_enum.hpp index b4eee3a..fb9e961 100644 --- a/include/magic_enum.hpp +++ b/include/magic_enum.hpp @@ -251,27 +251,34 @@ class static_string<0> { }; constexpr string_view pretty_name(string_view name) noexcept { + char const* str = name.data(); for (std::size_t i = name.size(); i > 0; --i) { - if (!((name[i - 1] >= '0' && name[i - 1] <= '9') || - (name[i - 1] >= 'a' && name[i - 1] <= 'z') || - (name[i - 1] >= 'A' && name[i - 1] <= 'Z') || + char c = str[i - 1]; + if (!((c >= '0' && c <= '9') || + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || #if defined(MAGIC_ENUM_ENABLE_NONASCII) - (name[i - 1] & 0x80) || + (c & 0x80) || #endif - (name[i - 1] == '_'))) { + (c == '_'))) { name.remove_prefix(i); break; } } - if (name.size() > 0 && ((name[0] >= 'a' && name[0] <= 'z') || - (name[0] >= 'A' && name[0] <= 'Z') || + if (name.size() > 0) + { + char c = name[0]; + if ((c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || #if defined(MAGIC_ENUM_ENABLE_NONASCII) - (name[0]) & 0x80) || + (c) & 0x80) || #endif - (name[0] == '_'))) { - return name; + (c == '_')) { + return name; + } } + return {}; // Invalid name. }