Loading...
Searching...
No Matches
enum_map.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 Artificial Intelligence Techniques, S.L. and Roberto López González
3
4#pragma once
5
6#include <initializer_list>
7
9
10namespace opennn
11{
12
13template <typename Enum>
15{
16public:
17 using Entry = pair<Enum, string>;
18
19 EnumMap(initializer_list<Entry> new_entries)
20 : entries(new_entries)
21 {
22 }
23
24 explicit EnumMap(vector<Entry> new_entries)
25 : entries(std::move(new_entries))
26 {
27 }
28
29 const vector<Entry>& get_entries() const noexcept { return entries; }
30
31 const string& to_string(Enum value) const
32 {
33 const auto entry = ranges::find(entries, value, &Entry::first);
34 throw_if(entry == entries.end(), "Unknown enum value");
35 return entry->second;
36 }
37
38 Enum from_string(string_view name) const
39 {
40 const auto entry = ranges::find(entries, name, &Entry::second);
41 throw_if(entry == entries.end(), "Unknown enum string: {}", name);
42 return entry->first;
43 }
44
45 Enum from_string(string_view name, Enum fallback) const
46 {
47 const auto entry = ranges::find(entries, name, &Entry::second);
48 return entry != entries.end() ? entry->first : fallback;
49 }
50
51private:
52 vector<Entry> entries;
53};
54
55}
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