diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/global/qfloat16.cpp | 14 | ||||
-rw-r--r-- | src/corelib/global/qfloat16.h | 5 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/corelib/global/qfloat16.cpp b/src/corelib/global/qfloat16.cpp index b8e7cbe928..376d6440e0 100644 --- a/src/corelib/global/qfloat16.cpp +++ b/src/corelib/global/qfloat16.cpp @@ -363,6 +363,20 @@ Q_CORE_EXPORT void qFloatFromFloat16(float *out, const qfloat16 *in, qsizetype l out[i] = float(in[i]); } +/*! + \fn size_t qfloat16::qHash(qfloat16 key, size_t seed) + \since 6.5.4 + \relates qfloat16 + + Returns the hash value for the \a key, using \a seed to seed the + calculation. + + \note In Qt versions before 6.5, this operation was provided by the + qHash(float) overload. In Qt versions 6.5.0 to 6.5.3, this functionality + was broken in various ways. In Qt versions 6.5.4 and 6.6 onwards, this + overload restores the Qt 6.4 behavior. +*/ + #ifndef QT_NO_DATASTREAM /*! \fn qfloat16::operator<<(QDataStream &ds, qfloat16 f) diff --git a/src/corelib/global/qfloat16.h b/src/corelib/global/qfloat16.h index d6a3ac164e..06542c4b4d 100644 --- a/src/corelib/global/qfloat16.h +++ b/src/corelib/global/qfloat16.h @@ -6,8 +6,10 @@ #define QFLOAT16_H #include <QtCore/qglobal.h> +#include <QtCore/qhashfunctions.h> #include <QtCore/qmath.h> #include <QtCore/qnamespace.h> + #include <limits> #include <string.h> @@ -144,6 +146,9 @@ private: friend inline qfloat16 operator*(qfloat16 a, qfloat16 b) noexcept { return qfloat16(static_cast<NearestFloat>(a) * static_cast<NearestFloat>(b)); } friend inline qfloat16 operator/(qfloat16 a, qfloat16 b) noexcept { return qfloat16(static_cast<NearestFloat>(a) / static_cast<NearestFloat>(b)); } + friend size_t qHash(qfloat16 key, size_t seed = 0) noexcept + { return qHash(float(key), seed); } // 6.4 algorithm, so keep using it; ### Qt 7: fix QTBUG-116077 + #define QF16_MAKE_ARITH_OP_FP(FP, OP) \ friend inline FP operator OP(qfloat16 lhs, FP rhs) noexcept { return static_cast<FP>(lhs) OP rhs; } \ friend inline FP operator OP(FP lhs, qfloat16 rhs) noexcept { return lhs OP static_cast<FP>(rhs); } |