11 #include <type_traits> 16 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 17 #define defineQHash(enumName)\ 18 inline size_t qHash(enumName pKey, size_t pSeed)\ 20 return ::qHash(static_cast<std::underlying_type<enumName>::type>(pKey), pSeed);\ 23 #define defineQHash(enumName)\ 24 inline uint qHash(enumName pKey, uint pSeed)\ 26 return ::qHash(static_cast<std::underlying_type<enumName>::type>(pKey), pSeed);\ 30 #define defineEnumOperators(enumName)\ 31 inline QDebug operator<<(QDebug pDbg, enumName pType)\ 33 QDebugStateSaver saver(pDbg);\ 34 return pDbg.noquote() << Enum<enumName>::getName(pType);\ 37 inline QString& operator+=(QString & pStr, enumName pType)\ 39 pStr += Enum<enumName>::getName(pType);\ 43 inline QString operator+(const QString& pStr, enumName pType)\ 45 return pStr + Enum<enumName>::getName(pType);\ 48 inline QString operator+(enumName pType, const QString& pStr)\ 50 return Enum<enumName>::getName(pType) + pStr;\ 53 inline bool operator==(std::underlying_type<enumName>::type pType, enumName pName)\ 55 return static_cast<std::underlying_type<enumName>::type>(pName) == pType;\ 57 inline bool operator!=(std::underlying_type<enumName>::type pType, enumName pName)\ 59 return !(pType == pName);\ 64 #define defineTypedEnumType(enumName, enumType, ...)\ 70 Q_DISABLE_COPY(Enum##enumName)\ 73 enum class enumName : enumType\ 81 using enumName = Enum##enumName::enumName;\ 83 defineEnumOperators(enumName) 86 #define defineEnumType(enumName, ...) defineTypedEnumType(enumName, int, __VA_ARGS__) 89 template<
typename EnumTypeT>
class Enum 91 using EnumBaseTypeT =
typename std::underlying_type<EnumTypeT>::type;
100 return QMetaEnum::fromType<EnumTypeT>();
112 const int value =
static_cast<int>(pType);
114 if (Q_UNLIKELY(
name ==
nullptr))
116 qCritical().noquote().nospace() <<
"CRITICAL CONVERSION MISMATCH: UNKNOWN 0x" << QString::number(value, 16);
117 return QLatin1String();
120 return QLatin1String(
name);
132 QVector<EnumTypeT> list;
135 list.reserve(metaEnum.keyCount());
136 for (
int i = 0; i < metaEnum.keyCount(); ++i)
138 list << static_cast<EnumTypeT>(metaEnum.value(i));
145 static EnumTypeT
fromString(
const char*
const pValue, EnumTypeT pDefault)
151 return static_cast<EnumTypeT
>(key);
157 static EnumTypeT
fromString(
const QString& pValue, EnumTypeT pDefaultType)
159 return fromString(pValue.toUtf8().constData(), pDefaultType);
171 return isValue(static_cast<int>(pValue));
177 return isValue(static_cast<uchar>(pValue));
183 return static_cast<EnumBaseTypeT
>(pType);
static QMetaEnum getQtEnumMetaEnum()
Definition: EnumHelper.h:98
static bool isValue(uchar pValue)
Definition: EnumHelper.h:169
Definition: EnumHelper.h:89
static QVector< EnumTypeT > getList()
Definition: EnumHelper.h:130
QLatin1String getEnumName(T pType)
Definition: EnumHelper.h:190
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:14
static bool isValue(int pValue)
Definition: EnumHelper.h:163
static QLatin1String getName()
Definition: EnumHelper.h:104
static EnumTypeT fromString(const QString &pValue, EnumTypeT pDefaultType)
Definition: EnumHelper.h:157
static EnumBaseTypeT getValue(EnumTypeT pType)
Definition: EnumHelper.h:181
#define T(v)
Definition: http_parser.cpp:237
static QLatin1String getName(EnumTypeT pType)
Definition: EnumHelper.h:110
const char * name
Definition: http_parser.cpp:473
static EnumTypeT fromString(const char *const pValue, EnumTypeT pDefault)
Definition: EnumHelper.h:145
static int getCount()
Definition: EnumHelper.h:124
static bool isValue(char pValue)
Definition: EnumHelper.h:175