EUDAQ
 All Classes Namespaces Files Functions Variables Pages
SmartEnum.hh
1 /*
2  * SmartEnum.hh
3  *
4  * Created on: Jun 27, 2014
5  * Author: behrens
6  */
7 
8 #ifndef SMARTENUM_HH_
9 #define SMARTENUM_HH_
10 
11 class SmartEnumBase {};
12 
13 #define DECLARE_ENUM_CLASS(ClassName, ...) \
14  class ClassName : public SmartEnumBase { \
15  public: \
16  enum Value { __VA_ARGS__ } value; \
17  const std::string &toString() { return toString(value); } \
18  static const std::string &toString(Value &v) { return getMap()[v]; } \
19  \
20  private: \
21  static std::map<Value, std::string> &getMap() { \
22  static const std::string str[] = {#__VA_ARGS__}; \
23  static const Value val[] = {__VA_ARGS__}; \
24  static std::map<Value, std::string> map; \
25  if (map.empty()) \
26  for (int i = 0; i < sizeof(val) / sizeof(Value); i++) \
27  map[val[i]] = str[i]; \
28  return map; \
29  } \
30  };
31 
32 #endif /* SMARTENUM_HH_ */
Definition: SmartEnum.hh:11