Quark  0.1
EnumTraits.h++
Go to the documentation of this file.
1 #ifndef __libquark_util_EnumTraits_hxx
2 #define __libquark_util_EnumTraits_hxx
3 
4 #include <QList>
5 #include <QString>
6 #include <QStringList>
7 
8 namespace quark {
9 namespace util {
10 
41 template<typename E> class EnumMap
42 {
43  public:
44 
51  EnumMap(E defaultValue, E invalidValue, QList<E> values, QStringList labels)
52  : _defaultValue(defaultValue)
53  , _invalidValue(invalidValue)
54  , _values(values)
55  , _labels(labels)
56  {
57  Q_ASSERT(values.size() == labels.size());
58  }
59 
61  ~EnumMap() { }
62 
64  E defaultValue() const
65  { return(_defaultValue); }
66 
68  E invalidValue() const
69  { return(_invalidValue); }
70 
75  E fromLabel(const QString &label) const;
76 
80  QString toLabel(E value) const;
81 
87  E fromInt(int value) const;
88 
92  int toInt(E value) const;
93 
95  const QList<E> values() const
96  { return(_values); }
97 
99  const QStringList labels() const
100  { return(_labels); }
101 
103  int ordinal(E value) const;
104 
109  E valueAt(int ordinal) const;
110 
111  private:
112 
113  E _defaultValue;
114  E _invalidValue;
115  QList<E> _values;
116  QStringList _labels;
117 };
118 
128 template<typename E> class EnumTraits
129 {
130  public:
131 
133  static E defaultValue()
134  { return(_map.defaultValue()); }
135 
137  static E invalidValue()
138  { return(_map.invalidValue()); }
139 
141  static const QList<E> values()
142  { return(_map.values()); }
143 
145  static const QStringList labels()
146  { return(_map.labels()); }
147 
152  static E fromLabel(const QString &label)
153  { return(_map.fromLabel(label)); }
154 
158  static QString toLabel(E value)
159  { return(_map.toLabel(value)); }
160 
166  static E fromInt(int value)
167  { return(_map.fromInt(value)); }
168 
172  static int toInt(E value)
173  { return(_map.toInt(value)); }
174 
176  static int ordinal(E value)
177  { return(_map.ordinal(value)); }
178 
183  static E valueAt(int ordinal)
184  { return(_map.valueAt(ordinal)); }
185 
186  private:
187 
188  EnumTraits();
189 
190  static EnumMap<E> _map;
191 };
192 
193 #include <quark/EnumTraitsImpl.h++>
194 
195 } // namespace util
196 } // namespace quark
197 
223 #define QUARK_DECLARE_ENUM_TRAITS(TYPE, DEFAULT_VALUE, INVALID_VALUE, \
224  VALUE_LIST, LABEL_LIST) \
225 namespace quark { namespace util { \
226 template<> EnumMap<TYPE> EnumTraits<TYPE>::_map(DEFAULT_VALUE, \
227  INVALID_VALUE, VALUE_LIST, LABEL_LIST); \
228 } }
229 
230 #endif // __libquark_util_EnumTraits_hxx
static int ordinal(E value)
Returns the ordinal for the given enum value.
Definition: EnumTraits.h++:176
static E valueAt(int ordinal)
Returns the enum value for the given ordinal, or the "invalid" value if the ordinal is invalid for th...
Definition: EnumTraits.h++:183
static E fromLabel(const QString &label)
Converts a label to an enum value.
Definition: EnumTraits.h++:152
static QString toLabel(E value)
Converts an enum value to its corresponding string label.
Definition: EnumTraits.h++:158
static E defaultValue()
Returns the enumeration&#39;s "default" value.
Definition: EnumTraits.h++:133
Definition: BarChartView.h++:6
static E fromInt(int value)
Converts an integer to an enum value.
Definition: EnumTraits.h++:166
static E invalidValue()
Returns the enumeration&#39;s "invalid" value.
Definition: EnumTraits.h++:137
static int toInt(E value)
Converts an enum value to the corresponding integer value.
Definition: EnumTraits.h++:172
static const QList< E > values()
Returns the list of valid enum values for this enum type.
Definition: EnumTraits.h++:141
static const QStringList labels()
Returns the list of string labels for this enum type.
Definition: EnumTraits.h++:145
A collection of static methods for accessing enum type metadata.
Definition: EnumTraits.h++:128