20 #include <unordered_map>
45 template<
typename ENUM>
49 typedef std::pair<ENUM, const char*>
Mapping;
53 void map(ENUM eval,
const char* str);
55 std::size_t
size()
const;
56 std::size_t
index(ENUM eval)
const;
58 ENUM
valueAt(std::size_t i)
const;
59 ENUM
value(
const char* str)
const;
60 const char*
string(ENUM eval)
const;
62 Mapping
mapping(std::size_t i)
const;
67 bool operator()(
const char* lhs,
const char* rhs)
const;
72 typename std::vector<Mapping>::const_iterator findCppSql(ENUM eval)
const;
74 std::unordered_map<const char*, ENUM, StrHash, StrEqual> m_strEnumMap;
75 std::vector<Mapping> m_mappingVec;
90 template<
typename ENUM>
95 template<
typename ENUM>
98 m_strEnumMap.emplace(str, eval);
99 m_mappingVec.emplace_back(eval, str);
102 template<
typename ENUM>
105 return m_mappingVec.size();
108 template<
typename ENUM>
111 return this->findCppSql(eval) - m_mappingVec.begin();
114 template<
typename ENUM>
117 assert(i < m_mappingVec.size());
118 return m_mappingVec.at(i).first;
121 template<
typename ENUM>
124 auto it = m_strEnumMap.find(str);
125 assert(it != m_strEnumMap.cend());
129 template<
typename ENUM>
132 auto it = this->findCppSql(eval);
136 template<
typename ENUM>
139 assert(i < m_mappingVec.size());
140 return m_mappingVec.at(i);
143 template<
typename ENUM>
144 typename std::vector<typename EnumStringMap<ENUM>::Mapping>::const_iterator
147 auto it = std::find_if(m_mappingVec.cbegin(), m_mappingVec.cend(),
148 [=] (
const Mapping& map) {
return map.first == eval; } );
149 assert(it != m_mappingVec.cend());
153 template<
typename ENUM>
154 bool EnumStringMap<ENUM>::StrEqual::operator()(
const char *lhs,
const char *rhs)
const
156 return std::strcmp(lhs, rhs) == 0;
EnumStringMap()
Definition: enum_string_map.h:91
Definition: basic_shared_pointer.h:20
Mapping mapping(std::size_t i) const
Definition: enum_string_map.h:137
void map(ENUM eval, const char *str)
Definition: enum_string_map.h:96
Provides mapping between a C++ enum type values and C strings.
Definition: enum_string_map.h:46
ENUM valueAt(std::size_t i) const
Definition: enum_string_map.h:115
std::pair< ENUM, const char * > Mapping
Definition: enum_string_map.h:49
const char * string(ENUM eval) const
Definition: enum_string_map.h:130
ENUM value(const char *str) const
Definition: enum_string_map.h:122
Definition: hash_fnv.h:62
std::size_t size() const
Definition: enum_string_map.h:103
std::size_t index(ENUM eval) const
Definition: enum_string_map.h:109