From 211ff8ac53293787012d133cb89ae22d82bf974c Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 4 Apr 2023 11:40:36 +0200 Subject: [PATCH] QPixmapCache: Move qHash(Key) from _p.h to public header ... and make it a hidden friend. This avoids ODR violations when, because they can't use ours (private, and not exported), users try to produce their own version of qHash(Key). [ChangeLog][QtGui][QPixmapCache] Made the qHash() overload for QPixmapCache::Key public (was: private) API. Change-Id: I324ed001c0ae0a251ac2e1d04713013452ffff9c Reviewed-by: Thiago Macieira Reviewed-by: Volker Hilsheimer (cherry picked from commit 7fa3267fda6cff720cca44e829f9a39789031a54) Reviewed-by: Qt Cherry-pick Bot --- src/gui/image/qpixmapcache.cpp | 11 ++++++++--- src/gui/image/qpixmapcache.h | 4 ++++ src/gui/image/qpixmapcache_p.h | 2 -- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp index 6cc5fd28a3c..e6b1f5ea385 100644 --- a/src/gui/image/qpixmapcache.cpp +++ b/src/gui/image/qpixmapcache.cpp @@ -218,10 +218,15 @@ QT_BEGIN_INCLUDE_NAMESPACE #include "qpixmapcache.moc" QT_END_INCLUDE_NAMESPACE -size_t qHash(const QPixmapCache::Key &k, size_t seed) +/*! + size_t QPixmapCache::qHash(const Key &key, size_t seed = 0); + \since 6.6 + + Returns the hash value for the \a key, using \a seed to seed the calculation. +*/ +size_t QPixmapCache::Key::hash(size_t seed) const noexcept { - const auto *keyData = QPMCache::get(k); - return qHash(keyData ? keyData->key : 0, seed); + return qHash(this->d ? this->d->key : 0, seed); } QPMCache::QPMCache() diff --git a/src/gui/image/qpixmapcache.h b/src/gui/image/qpixmapcache.h index 55aad6503f3..72ee1b797fa 100644 --- a/src/gui/image/qpixmapcache.h +++ b/src/gui/image/qpixmapcache.h @@ -31,6 +31,10 @@ public: bool isValid() const noexcept; private: + friend size_t qHash(const QPixmapCache::Key &k, size_t seed = 0) noexcept + { return k.hash(seed); } + size_t hash(size_t seed) const noexcept; + KeyData *d; friend class QPMCache; friend class QPixmapCache; diff --git a/src/gui/image/qpixmapcache_p.h b/src/gui/image/qpixmapcache_p.h index 6418296f561..38a28281b43 100644 --- a/src/gui/image/qpixmapcache_p.h +++ b/src/gui/image/qpixmapcache_p.h @@ -23,8 +23,6 @@ QT_BEGIN_NAMESPACE -size_t qHash(const QPixmapCache::Key &k, size_t seed = 0); - class QPixmapCache::KeyData { public: