Make the QMultiHash(const QHash &) constructor explicit
And add a QMultiHash::unite(const QHash &) method to avoid a copy of the data when inserting a QHash into a multi hash. Change-Id: I864aa9d2b9b7b2c367c3c4d140a2ce2f5408ae09 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
a9c52dbdf4
commit
f8c30759d9
@ -2538,6 +2538,16 @@ size_t qHash(long double key, size_t seed) noexcept
|
|||||||
\sa insert()
|
\sa insert()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*! \fn template <class Key, class T> QMultiHash &QMultiHash<Key, T>::unite(const QHash<Key, T> &other)
|
||||||
|
\since 6.0
|
||||||
|
|
||||||
|
Inserts all the items in the \a other hash into this hash
|
||||||
|
and returns a reference to this hash.
|
||||||
|
|
||||||
|
\sa insert()
|
||||||
|
*/
|
||||||
|
|
||||||
/*! \fn template <class Key, class T> QList<Key> QMultiHash<Key, T>::uniqueKeys() const
|
/*! \fn template <class Key, class T> QList<Key> QMultiHash<Key, T>::uniqueKeys() const
|
||||||
\since 5.13
|
\since 5.13
|
||||||
|
|
||||||
|
@ -1219,7 +1219,7 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMultiHash(const QHash<Key, T> &other)
|
explicit QMultiHash(const QHash<Key, T> &other)
|
||||||
: QMultiHash(other.begin(), other.end())
|
: QMultiHash(other.begin(), other.end())
|
||||||
{}
|
{}
|
||||||
void swap(QMultiHash &other) noexcept { qSwap(d, other.d); qSwap(m_size, other.m_size); }
|
void swap(QMultiHash &other) noexcept { qSwap(d, other.d); qSwap(m_size, other.m_size); }
|
||||||
@ -1808,6 +1808,13 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QMultiHash &unite(const QHash<Key, T> &other)
|
||||||
|
{
|
||||||
|
for (auto cit = other.cbegin(); cit != other.cend(); ++cit)
|
||||||
|
insert(cit.key(), *cit);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
QPair<iterator, iterator> equal_range(const Key &key)
|
QPair<iterator, iterator> equal_range(const Key &key)
|
||||||
{
|
{
|
||||||
detach();
|
detach();
|
||||||
|
@ -465,7 +465,7 @@ void Generator::generateCode()
|
|||||||
// Build extra array
|
// Build extra array
|
||||||
//
|
//
|
||||||
QList<QByteArray> extraList;
|
QList<QByteArray> extraList;
|
||||||
QMultiHash<QByteArray, QByteArray> knownExtraMetaObject = knownGadgets;
|
QMultiHash<QByteArray, QByteArray> knownExtraMetaObject(knownGadgets);
|
||||||
knownExtraMetaObject.unite(knownQObjectClasses);
|
knownExtraMetaObject.unite(knownQObjectClasses);
|
||||||
|
|
||||||
for (int i = 0; i < cdef->propertyList.count(); ++i) {
|
for (int i = 0; i < cdef->propertyList.count(); ++i) {
|
||||||
|
@ -1320,6 +1320,12 @@ void tst_QHash::qmultihash_specific()
|
|||||||
QVERIFY(map1.remove(42,5));
|
QVERIFY(map1.remove(42,5));
|
||||||
QVERIFY(map2.remove(42,5));
|
QVERIFY(map2.remove(42,5));
|
||||||
QVERIFY(map1 == map2);
|
QVERIFY(map1 == map2);
|
||||||
|
|
||||||
|
QHash<int, int> hash;
|
||||||
|
hash.insert(-1, -1);
|
||||||
|
map2.unite(hash);
|
||||||
|
QCOMPARE(map2.count(), 6);
|
||||||
|
QCOMPARE(map2[-1], -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user