istd.h
Go to the documentation of this file.
1 #ifndef istd_included
2 #define istd_included
3 
4 
5 // STL includes
6 #include <limits>
7 
8 // Qt includes
9 #include <QtCore/QtGlobal>
10 #include <QtCore/QByteArray>
11 #include <QtCore/QString>
12 #include <QtCore/QStringList>
13 
14 
21 namespace istd
22 {
23 } // namespace istd
24 
25 
26 static const double I_BIG_EPSILON = 1.0e-8;
27 
31 #define I_EPSILON std::numeric_limits<double>::epsilon()
32 
33 
37 #define I_HUGE_NUMBER 10e20
38 
39 
43 #define I_INFINITY std::numeric_limits<double>::infinity()
44 
45 
46 #ifndef QT_NO_DEBUG
47 
48 
49 #define I_IF_DEBUG(instructions) instructions
50 #define I_CRITICAL() Q_ASSERT(false)
51 
52 
53 #else // !QT_NO_DEBUG
54 
55 
56 #define I_CRITICAL()
57 #define I_IF_DEBUG(instructions)
58 
59 
60 #endif // !QT_NO_DEBUG
61 
62 
63 #ifndef NULL
64 #define NULL 0
65 #endif // !NULL
66 
67 
71 #define I_ENUM_GET_VALUES(Enum, ...)\
72  static QList<int> Enum##GetValues(){\
73  QList<int> values;\
74  int vars[] = {0, __VA_ARGS__};\
75  int count = (sizeof(vars) / sizeof(int));\
76  for(int i = 0; i < count; ++i){\
77  if (i > 0){\
78  values << vars[i];\
79  }\
80  }\
81  return values;\
82  }
83 
87 #define I_ENUM_GET_STRINGS(Enum, ...)\
88  static QStringList Enum##GetStrings(){\
89  QString enumValuesString = #__VA_ARGS__;\
90  QStringList values = enumValuesString.split(",");\
91  for (int i = 0; i < values.count(); ++i){\
92  QString rawValue = values[i].simplified();\
93  QStringList splitNames = rawValue.split("_");\
94  if (splitNames.isEmpty()){\
95  values[i] = rawValue;\
96  }\
97  else{\
98  QString formattedValue = rawValue;\
99  for (int partIndex = 1; partIndex < splitNames.count(); ++partIndex){\
100  QString partValue = splitNames[partIndex].toLower();\
101  if (partIndex == 1){\
102  formattedValue = partValue;\
103  }\
104  else{\
105  formattedValue += partValue.at(0).toUpper() + partValue.mid(1);\
106  }\
107  }\
108  values[i] = formattedValue;\
109  }\
110  }\
111  return values;\
112  }
113 
117 #define I_DECLARE_ENUM(Enum, ...)\
118  I_ENUM_GET_VALUES(Enum, __VA_ARGS__)\
119  I_ENUM_GET_STRINGS(Enum, __VA_ARGS__)\
120  static QByteArray ToString(Enum enumValue){\
121  static QByteArray emptyString;\
122  QStringList values = Enum##GetStrings();\
123  QList<int> enumValues = Enum##GetValues();\
124  Q_ASSERT(enumValues.count() == values.count());\
125  for (int i = 0; i < enumValues.count(); ++i){\
126  if (enumValues[i] == enumValue){\
127  return values[i].toUtf8();\
128  }\
129  }\
130  return emptyString;\
131  }\
132  static bool FromString(const QByteArray& enumString, Enum& enumValue){\
133  QStringList values = Enum##GetStrings();\
134  QList<int> enumValues = Enum##GetValues();\
135  Q_ASSERT(enumValues.count() == values.count());\
136  for (int i = 0; i < enumValues.count(); ++i){\
137  if (values[i].toUtf8() == enumString){\
138  enumValue = Enum(enumValues[i]);\
139  return true;\
140  }\
141  }\
142  return false;\
143  }
144 
145 #define I_DECLARE_FLAGS(Enum, ...)\
146  I_ENUM_GET_VALUES(Enum, __VA_ARGS__)\
147  I_ENUM_GET_STRINGS(Enum, __VA_ARGS__)\
148  static QByteArray Enum##ToString(int flags){\
149  QByteArray retVal;\
150  QStringList values = Enum##GetStrings();\
151  QList<int> enumValues = Enum##GetValues();\
152  Q_ASSERT(enumValues.count() == values.count());\
153  for (int i = 0; i < enumValues.count(); ++i){\
154  if (enumValues[i] & flags){\
155  if (!retVal.isEmpty()){\
156  retVal += "|";\
157  }\
158  retVal += values[i].toUtf8();\
159  }\
160  }\
161  return retVal;\
162  }\
163  static bool Enum##FromString(const QByteArray& enumString, int& flags){\
164  QStringList values = Enum##GetStrings();\
165  QList<int> enumValues = Enum##GetValues();\
166  flags = 0;\
167  Q_ASSERT(enumValues.count() == values.count());\
168  QList<QByteArray> separatedValues = enumString.split('|');\
169  for (int valueIndex = 0; valueIndex < separatedValues.count(); ++valueIndex){\
170  QByteArray value = separatedValues[valueIndex];\
171  for (int i = 0; i < enumValues.count(); ++i){\
172  if (values[i].toUtf8() == value){\
173  flags |= enumValues[i];\
174  }\
175  }\
176  }\
177  return true;\
178  }
179 
180 
181 #endif // !istd_included
182 
static const double I_BIG_EPSILON
Definition: istd.h:26

© 2007-2017 Witold Gantzke and Kirill Lepskiy