Radium Engine  1.5.0
EnumConverter.hpp
1 #pragma once
2 #include <Core/CoreMacros.hpp>
3 
4 #include <initializer_list>
5 
6 #include <Core/Utils/BijectiveAssociation.hpp>
7 
8 namespace Ra {
9 namespace Core {
10 namespace Utils {
11 
20 template <typename EnumBaseType>
22 {
23  public:
24  explicit EnumConverter( std::initializer_list<std::pair<EnumBaseType, std::string>> pairs );
25 
26  std::string getEnumerator( EnumBaseType v ) const;
27  EnumBaseType getEnumerator( const std::string& v ) const;
28  std::vector<std::string> getEnumerators() const;
29 
30  private:
32 };
33 
34 /* -------------------------------------------------------------------------------------------
35  * Implementation of template functions
36  * -----------------------------------------------------------------------------------------*/
37 
38 template <typename EnumBaseType>
40  std::initializer_list<std::pair<EnumBaseType, std::string>> pairs ) :
41  m_valueToString { pairs } {}
42 
43 template <typename EnumBaseType>
44 std::string EnumConverter<EnumBaseType>::getEnumerator( EnumBaseType v ) const {
45  return m_valueToString( v );
46 }
47 
48 template <typename EnumBaseType>
49 EnumBaseType EnumConverter<EnumBaseType>::getEnumerator( const std::string& v ) const {
50  return m_valueToString.key( v );
51 }
52 
53 template <typename EnumBaseType>
54 std::vector<std::string> EnumConverter<EnumBaseType>::getEnumerators() const {
55  std::vector<std::string> keys;
56  keys.reserve( m_valueToString.size() );
57  for ( const auto& p : m_valueToString ) {
58  keys.push_back( p.second );
59  }
60  return keys;
61 }
62 
63 } // namespace Utils
64 } // namespace Core
65 } // namespace Ra
This class manage the bijective association between string and integral representation of an enumerat...
Definition: Cage.cpp:3