Horizon
lut.hpp
1 #pragma once
2 #include <map>
3 
4 namespace horizon {
5 
10 template <typename T> class LutEnumStr {
11  static_assert(std::is_enum<T>::value, "Must be an enum type");
12 
13 public:
14  LutEnumStr(std::initializer_list<std::pair<const std::string, const T>> s)
15  {
16  for (auto it : s) {
17  fwd.insert(it);
18  rev.insert(std::make_pair(it.second, it.first));
19  }
20  }
24  const T lookup(const std::string &s) const
25  {
26  return fwd.at(s);
27  }
28 
29  const T lookup(const std::string &s, T def) const
30  {
31  if (fwd.count(s))
32  return fwd.at(s);
33  else
34  return def;
35  }
36 
40  const std::string &lookup_reverse(const T s) const
41  {
42  return rev.at(s);
43  }
44 
45 private:
46  std::map<std::string, T> fwd;
47  std::map<T, std::string> rev;
48 };
49 } // namespace horizon
Trivial bidirectional map for mapping strings to enums.
Definition: lut.hpp:10
const T lookup(const std::string &s) const
Definition: lut.hpp:24
Definition: block.cpp:7
const std::string & lookup_reverse(const T s) const
Definition: lut.hpp:40