19#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
20 #define defineQHash(enumName)\
21 inline size_t qHash(enumName pKey, size_t pSeed)\
23 return ::qHash(static_cast<std::underlying_type_t<enumName>>(pKey), pSeed);\
26 #define defineQHash(enumName)\
27 inline uint qHash(enumName pKey, uint pSeed)\
29 return ::qHash(static_cast<std::underlying_type_t<enumName>>(pKey), pSeed);\
33#define defineEnumOperators(enumName)\
34 inline QDebug operator<<(QDebug pDbg, enumName pType)\
36 QDebugStateSaver saver(pDbg);\
37 return pDbg.noquote() << Enum<enumName>::getName(pType);\
40 inline QString& operator+=(QString & pStr, enumName pType)\
42 pStr += Enum<enumName>::getName(pType);\
46 inline QString operator+(const QString& pStr, enumName pType)\
48 return pStr + Enum<enumName>::getName(pType);\
51 inline QString operator+(enumName pType, const QString& pStr)\
53 return Enum<enumName>::getName(pType) + pStr;\
56 inline bool operator==(std::underlying_type_t<enumName> pType, enumName pName)\
58 return static_cast<std::underlying_type_t<enumName>>(pName) == pType;\
60 inline bool operator!=(std::underlying_type_t<enumName> pType, enumName pName)\
62 return !(pType == pName);\
67#define defineTypedEnumType(enumName, enumType, ...)\
72 Q_DISABLE_COPY(Enum##enumName)\
78 enum class enumName : enumType\
86 using enumName = Enum##enumName::enumName;\
87 namespace governikusEnum##enumName\
91 qRegisterMetaType<enumType>(#enumName);\
95 defineEnumOperators(enumName)
98#define defineEnumType(enumName, ...) defineTypedEnumType(enumName, int, __VA_ARGS__)
101template<
typename EnumTypeT>
class Enum
103 using EnumBaseTypeT = std::underlying_type_t<EnumTypeT>;
114 return QMetaEnum::fromType<EnumTypeT>();
124 [[nodiscard]]
static QLatin1String
getName(EnumTypeT pType)
126 const auto value =
static_cast<int>(pType);
128 if (Q_UNLIKELY(
name ==
nullptr))
130 qCritical().noquote().nospace() <<
"CRITICAL CONVERSION MISMATCH: UNKNOWN 0x" << QString::number(value, 16);
131 return QLatin1String();
134 return QLatin1String(
name);
144 [[nodiscard]]
static QVector<EnumTypeT>
getList()
146 QVector<EnumTypeT> list;
149 list.reserve(metaEnum.keyCount());
150 for (
int i = 0; i < metaEnum.keyCount(); ++i)
152 list << static_cast<EnumTypeT>(metaEnum.value(i));
159 [[nodiscard]]
static EnumTypeT
fromString(
const char*
const pValue, EnumTypeT pDefault)
165 return static_cast<EnumTypeT
>(key);
171 [[nodiscard]]
static EnumTypeT
fromString(
const QString& pValue, EnumTypeT pDefaultType)
173 return fromString(pValue.toUtf8().constData(), pDefaultType);
183 [[nodiscard]]
static bool isValue(ushort pValue)
185 return isValue(
static_cast<int>(pValue));
189 [[nodiscard]]
static EnumBaseTypeT
getValue(EnumTypeT pType)
191 return static_cast<EnumBaseTypeT
>(pType);
Definition EnumHelper.h:102
static bool isValue(int pValue)
Definition EnumHelper.h:177
static QVector< EnumTypeT > getList()
Definition EnumHelper.h:144
static QLatin1String getName()
Definition EnumHelper.h:118
static QLatin1String getName(EnumTypeT pType)
Definition EnumHelper.h:124
static EnumTypeT fromString(const char *const pValue, EnumTypeT pDefault)
Definition EnumHelper.h:159
static EnumTypeT fromString(const QString &pValue, EnumTypeT pDefaultType)
Definition EnumHelper.h:171
static bool isValue(ushort pValue)
Definition EnumHelper.h:183
static int getCount()
Definition EnumHelper.h:138
static EnumBaseTypeT getValue(EnumTypeT pType)
Definition EnumHelper.h:189
static QMetaEnum getQtEnumMetaEnum()
Definition EnumHelper.h:112
const char * name
Definition http_parser.cpp:473
#define T(v)
Definition http_parser.cpp:237
Implementation of GeneralAuthenticate response APDUs.
Definition CommandApdu.h:16
QLatin1String getEnumName(T pType)
Definition EnumHelper.h:198