Revert "Optimize QJsonObject::operator=="

This reverts commit 862fa24179505ef725ff78bb64bdabd54bd00c95,
which attempted to optimize QJsonObject::operator== under the
assumption that the entries it holds are lexicographically
sorted. They should be, because Object::indexOf() finds them
by binary search, but apparently both fromJson(), as well as
construction through op[] leave (some) entries unsorted.

This behavior should be fixed, because other code relies on
sorted entries, too, but until the problem is more fully under-
stood, revert the patch to unbreak equality comparisons.

Task-number: QTBUG-56843
Change-Id: I5b608c16d1bbcb4f01b75ce93bd58b49ff050be2
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
Marc Mutz 2016-11-12 21:01:20 +01:00
parent addf1f45f3
commit 80842959c4
2 changed files with 2 additions and 4 deletions

View File

@ -691,8 +691,6 @@ public:
bool operator >=(const Entry &other) const; bool operator >=(const Entry &other) const;
}; };
inline bool operator!=(const Entry &lhs, const Entry &rhs) { return !(lhs == rhs); }
inline bool Entry::operator >=(const QString &key) const inline bool Entry::operator >=(const QString &key) const
{ {
if (value.latinKey) if (value.latinKey)

View File

@ -545,8 +545,8 @@ bool QJsonObject::operator==(const QJsonObject &other) const
for (uint i = 0; i < o->length; ++i) { for (uint i = 0; i < o->length; ++i) {
QJsonPrivate::Entry *e = o->entryAt(i); QJsonPrivate::Entry *e = o->entryAt(i);
QJsonPrivate::Entry *oe = other.o->entryAt(i); QJsonValue v(d, o, e->value);
if (*e != *oe || QJsonValue(d, o, e->value) != QJsonValue(other.d, other.o, oe->value)) if (other.value(e->key()) != v)
return false; return false;
} }