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 {
|
||||
|
||||
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;
|
||||
for (const auto &key : multiHash.uniqueKeys())
|
||||
out.insert(key, multiHash.value(key));
|
||||
out.reserve(multiHash.size());
|
||||
for (const auto &[k, v] : multiHash.asKeyValueRange())
|
||||
out.try_emplace(k, v);
|
||||
return out;
|
||||
}
|
||||
|
||||
|
|
@ -50,13 +54,13 @@ const QHash<QByteArray, QByteArray> &QGrpcCommonOptions::metadata() const &
|
|||
{
|
||||
m_deprecatedQHashRefUsed = true;
|
||||
if (m_metadataMulti != m_metadata)
|
||||
m_metadata = mergeHash(m_metadataMulti);
|
||||
m_metadata = toHash(m_metadataMulti);
|
||||
return m_metadata;
|
||||
}
|
||||
QHash<QByteArray, QByteArray> QGrpcCommonOptions::metadata() &&
|
||||
{
|
||||
if (m_metadataMulti != m_metadata)
|
||||
m_metadata = mergeHash(m_metadataMulti);
|
||||
m_metadata = toHash(m_metadataMulti);
|
||||
return std::move(m_metadata);
|
||||
}
|
||||
|
||||
|
|
@ -152,7 +156,7 @@ void QGrpcCommonOptions::setMetadata(const QMultiHash<QByteArray, QByteArray> &m
|
|||
m_metadataMulti = md;
|
||||
#if QT_DEPRECATED_SINCE(6, 13)
|
||||
if (m_deprecatedQHashRefUsed)
|
||||
m_metadata = mergeHash(m_metadataMulti);
|
||||
m_metadata = toHash(m_metadataMulti);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -161,7 +165,7 @@ void QGrpcCommonOptions::setMetadata(QMultiHash<QByteArray, QByteArray> &&md)
|
|||
m_metadataMulti = std::move(md);
|
||||
#if QT_DEPRECATED_SINCE(6, 13)
|
||||
if (m_deprecatedQHashRefUsed)
|
||||
m_metadata = mergeHash(m_metadataMulti);
|
||||
m_metadata = toHash(m_metadataMulti);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,11 +60,13 @@ private:
|
|||
|
||||
namespace QtGrpcPrivate {
|
||||
|
||||
QHash<QByteArray, QByteArray> mergeHash(const QMultiHash<QByteArray, QByteArray> &multiHash);
|
||||
bool operator==(const QMultiHash<QByteArray, QByteArray> &multiHash,
|
||||
const QHash<QByteArray, QByteArray> &hash);
|
||||
bool operator!=(const QMultiHash<QByteArray, QByteArray> &multiHash,
|
||||
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;
|
||||
d->serverInitialMetadata = std::move(metadata);
|
||||
#if QT_DEPRECATED_SINCE(6, 13)
|
||||
d->deprServerInitialMetadata = QtGrpcPrivate::mergeHash(d->serverInitialMetadata);
|
||||
d->deprServerInitialMetadata = QtGrpcPrivate::toHash(d->serverInitialMetadata);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue