From 3c814a53c372643a47e8fe715f93d067b2aeed6a Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Sat, 13 Jul 2024 16:37:25 -0400 Subject: [PATCH] Access the enumerates as constexpr string array --- Enum.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Enum.h b/Enum.h index 584c482..ee9e58e 100644 --- a/Enum.h +++ b/Enum.h @@ -120,7 +120,31 @@ namespace Alepha::Hydrogen ::detail:: Enum_m StrictInteger value= static_cast< StrictInteger >( 0 ); + struct StringArray + { + static constexpr std::size_t size() noexcept { return sizeof...( values ); } + + static constexpr const ConstexprString array[ StringArray::size() ]= { ( values.cs_string() )... }; + + constexpr const ConstexprString & + operator[] ( const std::size_t sz ) const + { + return array[ sz ]; + } + + constexpr const ConstexprString *begin() const { return array; } + constexpr const ConstexprString *end() const { return &array[ size() ]; } + }; + public: + static constexpr StringArray keys() { return {}; } + + constexpr const ConstexprString & + key() const + { + return keys()[ static_cast< std::size_t >( value ) ]; + } + static constexpr std::string name() { return buildAllNames( { ( values.cs_string() )... } ); } static constexpr bool accepts( const std::string &s ) { return ( ... || ( values.cs_string().c_str() == s ) ); }