From ddee595d583c251d4016332c9e3906bb1483c010 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Sat, 1 May 2021 18:03:41 +0200 Subject: QFlags: add qHash overload Stop going through the implicit int conversion. [ChangeLog][QtCore][QFlags] QFlags now has a qHash() overload. Change-Id: Id380ed252695f24af2e8c239b650dcb6f44e2893 Reviewed-by: Thiago Macieira --- src/corelib/global/qglobal.cpp | 9 +++++++++ src/corelib/tools/qhashfunctions.h | 4 ++++ 2 files changed, 13 insertions(+) (limited to 'src') diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index dea3b30a29..8753ac65f4 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -515,6 +515,15 @@ static_assert(sizeof(qint64) == 8, "Internal error, qint64 is misdefined"); \sa Int */ +/*! + \fn template size_t qHash(QFlags flags, size_t seed = 0) noexcept + \since 6.2 + \relates QFlags + + Calculates the hash for the flags \a flags, using \a seed + to seed the calcualtion. +*/ + /*! \macro Q_DISABLE_COPY(Class) \relates QObject diff --git a/src/corelib/tools/qhashfunctions.h b/src/corelib/tools/qhashfunctions.h index 018c317834..835fed9589 100644 --- a/src/corelib/tools/qhashfunctions.h +++ b/src/corelib/tools/qhashfunctions.h @@ -175,6 +175,10 @@ Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(QKeyCombination key, size_t { return qHash(key.toCombined(), seed); } Q_CORE_EXPORT Q_DECL_PURE_FUNCTION uint qt_hash(QStringView key, uint chained = 0) noexcept; +template +Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(QFlags flags, size_t seed = 0) noexcept +{ return qHash(flags.toInt(), seed); } + template , bool> = true> size_t qHash(const T &t, size_t seed) noexcept(noexcept(qHash(t))) { return qHash(t) ^ seed; } -- cgit v1.2.3