6#include <initializer_list>
13template <
typename Enum>
17 using Entry = pair<Enum, string>;
19 EnumMap(initializer_list<Entry> new_entries)
20 : entries(new_entries)
24 explicit EnumMap(vector<Entry> new_entries)
25 : entries(std::move(new_entries))
29 const vector<Entry>&
get_entries() const noexcept {
return entries; }
33 const auto entry = ranges::find(entries, value, &Entry::first);
34 throw_if(entry == entries.end(),
"Unknown enum value");
40 const auto entry = ranges::find(entries, name, &Entry::second);
41 throw_if(entry == entries.end(),
"Unknown enum string: {}", name);
47 const auto entry = ranges::find(entries, name, &Entry::second);
48 return entry != entries.end() ? entry->first : fallback;
52 vector<Entry> entries;
const string & to_string(Enum value) const
Definition enum_map.h:31
Enum from_string(string_view name, Enum fallback) const
Definition enum_map.h:45
EnumMap(initializer_list< Entry > new_entries)
Definition enum_map.h:19
const vector< Entry > & get_entries() const noexcept
Definition enum_map.h:29
Enum from_string(string_view name) const
Definition enum_map.h:38
EnumMap(vector< Entry > new_entries)
Definition enum_map.h:24
pair< Enum, string > Entry
Definition enum_map.h:17
Definition configuration.h:10
#define throw_if(condition,...)
Definition opennn_types.h:243