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 ) ); }