29#include <fmt/format.h>
39 using Enum =
typename Traits::Enum;
40 using Traits::StaticName;
41 inline static constexpr std::size_t
N = Traits::Names.
size();
56 static constexpr std::size_t
size() {
return N; }
64 e =
static_cast<Enum>(e + 1);
69 e =
static_cast<Enum>(e - 1);
80 [[nodiscard]] std::string
Name()
const {
return Traits::Names[e]; }
92 if (!first) Result +=
", ";
101 std::vector<std::string> Result;
105 Result.push_back(a.Name());
120 using namespace std::literals::string_literals;
121 std::string ErrorStr =
"Unknown initializer for "s + StaticName +
"; choices are " + this->ListAll() +
'.';
122 throw std::runtime_error(ErrorStr);
125template <
typename Traits,
typename CharT>
struct std::formatter<
NamedEnumeration<Traits>, CharT>
127 constexpr auto parse(std::basic_format_parse_context<CharT>& ctx) {
return ctx.begin(); }
131 return std::format_to(ctx.out(),
"{}", e.
Name());
Definition namedenum.hpp:37
static std::string ListAll()
Definition namedenum.hpp:86
bool operator!=(const NamedEnumeration &Other) const
Definition namedenum.hpp:59
NamedEnumeration(std::string_view Name)
Definition namedenum.hpp:110
static constexpr Enum BEGIN
Definition namedenum.hpp:43
static constexpr Enum DEFAULT
Definition namedenum.hpp:42
static constexpr std::size_t size()
Definition namedenum.hpp:56
NamedEnumeration & operator++()
Definition namedenum.hpp:62
static std::vector< std::string > EnumerateAll()
Definition namedenum.hpp:99
typename Traits::Enum Enum
Definition namedenum.hpp:39
NamedEnumeration()
Definition namedenum.hpp:46
static constexpr Enum END
Definition namedenum.hpp:44
bool operator==(Enum a) const
Definition namedenum.hpp:60
bool operator!=(Enum a) const
Definition namedenum.hpp:61
bool operator==(const NamedEnumeration &Other) const
Definition namedenum.hpp:58
const NamedEnumeration & operator*() const
Definition namedenum.hpp:72
std::string Name() const
Definition namedenum.hpp:80
static constexpr std::size_t N
Definition namedenum.hpp:41
NamedEnumeration & operator--()
Definition namedenum.hpp:67
NamedEnumeration end() const
Definition namedenum.hpp:54
NamedEnumeration(Enum a)
Definition namedenum.hpp:48
NamedEnumeration begin() const
Definition namedenum.hpp:53
bool iequals(std::string_view a, std::string_view b)
Definition string_util.hpp:52