mirror of https://github.com/qt/qtgrpc.git
QGrpcCommonOptions: improve and rename mergeHash()
Rename the free function to 'toHash', as no merging was happening, this name was misleading. Improve the implementation by adding the missing 'reserve()' and simply try_emplace() the pair into the hash. This will still take the newest value as before but without constructing a temporary key list and having the extra lookup with value(). Pick-to: 6.10 Change-Id: I4834feea43e20614caea3d587055c024012e0596 Reviewed-by: Marc Mutz <marc.mutz@qt.io> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
parent
0e2803842a
commit
f636865a23
|
|
@ -9,11 +9,15 @@ QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
namespace QtGrpcPrivate {
|
namespace QtGrpcPrivate {
|
||||||
|
|
||||||
QHash<QByteArray, QByteArray> mergeHash(const QMultiHash<QByteArray, QByteArray> &multiHash)
|
QHash<QByteArray, QByteArray>
|
||||||
|
toHash(const QMultiHash<QByteArray, QByteArray> &multiHash)
|
||||||
{
|
{
|
||||||
|
// Transform a QMultiHash into a QHash by keeping only the first value for each key.
|
||||||
|
// The first value will be the newest one when iterating the multi-hash.
|
||||||
QHash<QByteArray, QByteArray> out;
|
QHash<QByteArray, QByteArray> out;
|
||||||
for (const auto &key : multiHash.uniqueKeys())
|
out.reserve(multiHash.size());
|
||||||
out.insert(key, multiHash.value(key));
|
for (const auto &[k, v] : multiHash.asKeyValueRange())
|
||||||
|
out.try_emplace(k, v);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,13 +54,13 @@ const QHash<QByteArray, QByteArray> &QGrpcCommonOptions::metadata() const &
|
||||||
{
|
{
|
||||||
m_deprecatedQHashRefUsed = true;
|
m_deprecatedQHashRefUsed = true;
|
||||||
if (m_metadataMulti != m_metadata)
|
if (m_metadataMulti != m_metadata)
|
||||||
m_metadata = mergeHash(m_metadataMulti);
|
m_metadata = toHash(m_metadataMulti);
|
||||||
return m_metadata;
|
return m_metadata;
|
||||||
}
|
}
|
||||||
QHash<QByteArray, QByteArray> QGrpcCommonOptions::metadata() &&
|
QHash<QByteArray, QByteArray> QGrpcCommonOptions::metadata() &&
|
||||||
{
|
{
|
||||||
if (m_metadataMulti != m_metadata)
|
if (m_metadataMulti != m_metadata)
|
||||||
m_metadata = mergeHash(m_metadataMulti);
|
m_metadata = toHash(m_metadataMulti);
|
||||||
return std::move(m_metadata);
|
return std::move(m_metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -152,7 +156,7 @@ void QGrpcCommonOptions::setMetadata(const QMultiHash<QByteArray, QByteArray> &m
|
||||||
m_metadataMulti = md;
|
m_metadataMulti = md;
|
||||||
#if QT_DEPRECATED_SINCE(6, 13)
|
#if QT_DEPRECATED_SINCE(6, 13)
|
||||||
if (m_deprecatedQHashRefUsed)
|
if (m_deprecatedQHashRefUsed)
|
||||||
m_metadata = mergeHash(m_metadataMulti);
|
m_metadata = toHash(m_metadataMulti);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -161,7 +165,7 @@ void QGrpcCommonOptions::setMetadata(QMultiHash<QByteArray, QByteArray> &&md)
|
||||||
m_metadataMulti = std::move(md);
|
m_metadataMulti = std::move(md);
|
||||||
#if QT_DEPRECATED_SINCE(6, 13)
|
#if QT_DEPRECATED_SINCE(6, 13)
|
||||||
if (m_deprecatedQHashRefUsed)
|
if (m_deprecatedQHashRefUsed)
|
||||||
m_metadata = mergeHash(m_metadataMulti);
|
m_metadata = toHash(m_metadataMulti);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,11 +60,13 @@ private:
|
||||||
|
|
||||||
namespace QtGrpcPrivate {
|
namespace QtGrpcPrivate {
|
||||||
|
|
||||||
QHash<QByteArray, QByteArray> mergeHash(const QMultiHash<QByteArray, QByteArray> &multiHash);
|
|
||||||
bool operator==(const QMultiHash<QByteArray, QByteArray> &multiHash,
|
bool operator==(const QMultiHash<QByteArray, QByteArray> &multiHash,
|
||||||
const QHash<QByteArray, QByteArray> &hash);
|
const QHash<QByteArray, QByteArray> &hash);
|
||||||
bool operator!=(const QMultiHash<QByteArray, QByteArray> &multiHash,
|
bool operator!=(const QMultiHash<QByteArray, QByteArray> &multiHash,
|
||||||
const QHash<QByteArray, QByteArray> &hash);
|
const QHash<QByteArray, QByteArray> &hash);
|
||||||
|
#if QT_DEPRECATED_SINCE(6, 13)
|
||||||
|
QHash<QByteArray, QByteArray> toHash(const QMultiHash<QByteArray, QByteArray> &multiHash);
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -313,7 +313,7 @@ void QGrpcOperationContext::setServerInitialMetadata(QMultiHash<QByteArray, QByt
|
||||||
return;
|
return;
|
||||||
d->serverInitialMetadata = std::move(metadata);
|
d->serverInitialMetadata = std::move(metadata);
|
||||||
#if QT_DEPRECATED_SINCE(6, 13)
|
#if QT_DEPRECATED_SINCE(6, 13)
|
||||||
d->deprServerInitialMetadata = QtGrpcPrivate::mergeHash(d->serverInitialMetadata);
|
d->deprServerInitialMetadata = QtGrpcPrivate::toHash(d->serverInitialMetadata);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue