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