Deluge Firmware 1.3.0
Build date: 2025.04.16
Loading...
Searching...
No Matches
enum_to_string_map.hpp
1#include "definitions.h"
2#include "io/debug/log.h"
3#include "mem_functions.h"
4#include <array>
5#include <cstddef>
6#include <cstring>
7#include <utility>
8template <class Enum, std::size_t N>
9class EnumStringMap {
10
11public:
12 constexpr EnumStringMap(const std::array<std::pair<Enum, const char*>, N>& init) : stringList_() {
13 for (std::size_t i = 0; i < N; ++i) {
14 const auto& p = init[i];
15 stringList_[static_cast<std::underlying_type_t<Enum>>(p.first)] = p.second;
16 }
17 }
18
19 constexpr const char* operator()(Enum a) { return stringList_[static_cast<std::underlying_type_t<Enum>>(a)]; }
20
22 constexpr Enum operator()(const char* str) {
23 for (int i = 0; i < N; i++) {
24 if (!strcmp(str, stringList_[i])) {
25 return static_cast<Enum>(i);
26 }
27 }
28
29 char popup[25];
30 D_PRINTLN(popup, "no match for:%s", str);
31
32 return static_cast<Enum>(N);
33 }
34
35private:
36 const char* stringList_[N];
37};
constexpr Enum operator()(const char *str)
Convert string to enum, returning enum variant N on failure.
Definition enum_to_string_map.hpp:22