Ion
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
enumhelper.h
Go to the documentation of this file.
1 
18 #ifndef ION_BASE_ENUMHELPER_H_
19 #define ION_BASE_ENUMHELPER_H_
20 
21 #include "base/integral_types.h"
22 #include "ion/base/indexmap.h"
23 
24 namespace ion {
25 namespace base {
26 
42  1U, 2U, 3U
56 class EnumHelper {
57  public:
59  template <typename EnumType> static const char* GetString(EnumType e) {
60  const EnumData<EnumType> data = GetEnumData<EnumType>();
61  return e >= 0 && static_cast<size_t>(e) < data.index_map.GetCount() ?
62  data.strings[e] : "<INVALID>";
63  }
64 
69  template <typename EnumType>
71  return GetEnumData<EnumType>().index_map;
72  }
73 
75  template <typename EnumType> static size_t GetCount() {
76  return GetIndexMap<EnumType>().GetCount();
77  }
78 
80  template <typename EnumType> static uint32 GetConstant(EnumType e) {
81  return GetIndexMap<EnumType>().GetUnorderedIndex(e);
82  }
83 
85  template <typename EnumType> static EnumType GetEnum(uint32 c) {
86  return GetIndexMap<EnumType>().GetOrderedIndex(c);
87  }
88 
89  private:
92  template <typename EnumType>
93  struct EnumData {
97  EnumData(const IndexMap<EnumType, uint32>& index_map_in,
98  const char* strings_in[])
99  : index_map(index_map_in), strings(strings_in) {}
100  const IndexMap<EnumType, uint32> index_map; // Enum value -> uint32.
101  const char** strings; // Enum value -> string.
102  };
103 
106  template <typename EnumType> static const EnumData<EnumType> GetEnumData();
107 };
108 
109 } // namespace base
110 } // namespace ion
111 
112 #endif // ION_BASE_ENUMHELPER_H_
static uint32 GetConstant(EnumType e)
Returns the constant value corresponding to an enum.
Definition: enumhelper.h:80
}; static const char* kStrings[] = { "Value1", "Value2", "Value3" }; return EnumData<Values>(IndexMap...
Definition: enumhelper.h:56
static const char * GetString(EnumType e)
Returns a string corresponding to an enum.
Definition: enumhelper.h:59
static size_t GetCount()
Returns the number of values corresponding to an enum.
Definition: enumhelper.h:75
static EnumType GetEnum(uint32 c)
Returns the enum corresponding to a constant value.
Definition: enumhelper.h:85
static const IndexMap< EnumType, uint32 > GetIndexMap()
Creates and returns an IndexMap instance that can be used to convert between enums of the given type ...
Definition: enumhelper.h:70