Rhi: improve qHash implementations
Use the combiners and an algorithm. Change-Id: I577950bbd2e8b0556f28e2a8381e432c22bb0dc9 Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This commit is contained in:
parent
707129fd5a
commit
902120c621
@ -545,10 +545,12 @@ bool operator==(const QShader &lhs, const QShader &rhs) Q_DECL_NOTHROW
|
||||
*/
|
||||
size_t qHash(const QShader &s, size_t seed) Q_DECL_NOTHROW
|
||||
{
|
||||
size_t h = s.stage();
|
||||
for (auto it = s.d->shaders.constBegin(), itEnd = s.d->shaders.constEnd(); it != itEnd; ++it)
|
||||
h += qHash(it.key(), seed) + qHash(it.value().shader(), seed);
|
||||
return h;
|
||||
QtPrivate::QHashCombine hash;
|
||||
seed = hash(seed, s.stage());
|
||||
seed = qHashRange(s.d->shaders.keyValueBegin(),
|
||||
s.d->shaders.keyValueEnd(),
|
||||
seed);
|
||||
return seed;
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -598,7 +600,11 @@ bool operator==(const QShaderKey &lhs, const QShaderKey &rhs) Q_DECL_NOTHROW
|
||||
*/
|
||||
size_t qHash(const QShaderKey &k, size_t seed) Q_DECL_NOTHROW
|
||||
{
|
||||
return seed + 10 * k.source() + k.sourceVersion().version() + k.sourceVersion().flags() + k.sourceVariant();
|
||||
return qHashMulti(seed,
|
||||
k.source(),
|
||||
k.sourceVersion().version(),
|
||||
k.sourceVersion().flags(),
|
||||
k.sourceVariant());
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -620,6 +626,16 @@ bool operator==(const QShaderCode &lhs, const QShaderCode &rhs) Q_DECL_NOTHROW
|
||||
\relates QShaderCode
|
||||
*/
|
||||
|
||||
/*!
|
||||
Returns the hash value for \a k, using \a seed to seed the calculation.
|
||||
|
||||
\relates QShaderCode
|
||||
*/
|
||||
size_t qHash(const QShaderCode &k, size_t seed) noexcept
|
||||
{
|
||||
return qHash(k.shader(), seed);
|
||||
}
|
||||
|
||||
#ifndef QT_NO_DEBUG_STREAM
|
||||
QDebug operator<<(QDebug dbg, const QShader &bs)
|
||||
{
|
||||
|
@ -81,6 +81,9 @@ private:
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(QShaderVersion::Flags)
|
||||
Q_DECLARE_TYPEINFO(QShaderVersion, Q_MOVABLE_TYPE);
|
||||
|
||||
class QShaderCode;
|
||||
Q_GUI_EXPORT size_t qHash(const QShaderCode &, size_t = 0) noexcept;
|
||||
|
||||
class Q_GUI_EXPORT QShaderCode
|
||||
{
|
||||
public:
|
||||
@ -94,6 +97,8 @@ public:
|
||||
void setEntryPoint(const QByteArray &entry) { m_entryPoint = entry; }
|
||||
|
||||
private:
|
||||
friend Q_GUI_EXPORT size_t qHash(const QShaderCode &, size_t) noexcept;
|
||||
|
||||
QByteArray m_shader;
|
||||
QByteArray m_entryPoint;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user