summaryrefslogtreecommitdiffstats
path: root/src/corelib/serialization/qjsonobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/serialization/qjsonobject.h')
-rw-r--r--src/corelib/serialization/qjsonobject.h139
1 files changed, 112 insertions, 27 deletions
diff --git a/src/corelib/serialization/qjsonobject.h b/src/corelib/serialization/qjsonobject.h
index 5d7fb227a7..4cdbf4511d 100644
--- a/src/corelib/serialization/qjsonobject.h
+++ b/src/corelib/serialization/qjsonobject.h
@@ -21,12 +21,12 @@ class Q_CORE_EXPORT QJsonObject
public:
QJsonObject();
- QJsonObject(std::initializer_list<QPair<QString, QJsonValue> > args);
+ QJsonObject(std::initializer_list<std::pair<QString, QJsonValue> > args);
~QJsonObject();
- QJsonObject(const QJsonObject &other);
- QJsonObject &operator =(const QJsonObject &other);
+ QJsonObject(const QJsonObject &other) noexcept;
+ QJsonObject &operator =(const QJsonObject &other) noexcept;
QJsonObject(QJsonObject &&other) noexcept;
@@ -52,11 +52,9 @@ public:
inline qsizetype length() const { return size(); }
bool isEmpty() const;
-#if QT_STRINGVIEW_LEVEL < 2
QJsonValue value(const QString &key) const;
QJsonValue operator[] (const QString &key) const;
QJsonValueRef operator[] (const QString &key);
-#endif
QJsonValue value(QStringView key) const;
QJsonValue value(QLatin1StringView key) const;
QJsonValue operator[] (QStringView key) const { return value(key); }
@@ -64,11 +62,9 @@ public:
QJsonValueRef operator[] (QStringView key);
QJsonValueRef operator[] (QLatin1StringView key);
-#if QT_STRINGVIEW_LEVEL < 2
void remove(const QString &key);
QJsonValue take(const QString &key);
bool contains(const QString &key) const;
-#endif
void remove(QStringView key);
void remove(QLatin1StringView key);
QJsonValue take(QStringView key);
@@ -76,9 +72,10 @@ public:
bool contains(QStringView key) const;
bool contains(QLatin1StringView key) const;
+#if QT_CORE_REMOVED_SINCE(6, 8)
bool operator==(const QJsonObject &other) const;
bool operator!=(const QJsonObject &other) const;
-
+#endif
class const_iterator;
class iterator
@@ -110,17 +107,17 @@ public:
inline const QJsonValueConstRef *operator->() const { return &item; }
inline QJsonValueRef *operator->() { return &item; }
inline QJsonValueRef operator[](qsizetype j) const { return *(*this + j); }
-
+#if QT_CORE_REMOVED_SINCE(6, 8)
inline bool operator==(const iterator &other) const
{ return item.d == other.item.d && item.index == other.item.index; }
- inline bool operator!=(const iterator &other) const { return !(*this == other); }
+ inline bool operator!=(const iterator &other) const { return !operator==(other); }
bool operator<(const iterator& other) const
{ Q_ASSERT(item.d == other.item.d); return item.index < other.item.index; }
bool operator<=(const iterator& other) const
{ Q_ASSERT(item.d == other.item.d); return item.index <= other.item.index; }
- bool operator>(const iterator& other) const { return !(*this <= other); }
- bool operator>=(const iterator& other) const { return !(*this < other); }
-
+ bool operator>(const iterator& other) const { return !operator<=(other); }
+ bool operator>=(const iterator& other) const { return !operator<(other); }
+#endif
inline iterator &operator++() { ++item.index; return *this; }
inline iterator operator++(int) { iterator r = *this; ++item.index; return r; }
inline iterator &operator--() { --item.index; return *this; }
@@ -132,15 +129,63 @@ public:
qsizetype operator-(iterator j) const { return item.index - j.item.index; }
public:
+#if QT_CORE_REMOVED_SINCE(6, 8)
inline bool operator==(const const_iterator &other) const
{ return item.d == other.item.d && item.index == other.item.index; }
- inline bool operator!=(const const_iterator &other) const { return !(*this == other); }
+ inline bool operator!=(const const_iterator &other) const { return !operator==(other); }
bool operator<(const const_iterator& other) const
{ Q_ASSERT(item.d == other.item.d); return item.index < other.item.index; }
bool operator<=(const const_iterator& other) const
{ Q_ASSERT(item.d == other.item.d); return item.index <= other.item.index; }
- bool operator>(const const_iterator& other) const { return !(*this <= other); }
- bool operator>=(const const_iterator& other) const { return !(*this < other); }
+ bool operator>(const const_iterator& other) const { return operator<=(other); }
+ bool operator>=(const const_iterator& other) const { return operator<(other); }
+#endif
+ private:
+ // Helper functions
+ static bool comparesEqual_helper(const iterator &lhs, const iterator &rhs) noexcept
+ {
+ return lhs.item.d == rhs.item.d && lhs.item.index == rhs.item.index;
+ }
+ static bool comparesEqual_helper(const iterator &lhs, const const_iterator &rhs) noexcept
+ {
+ return lhs.item.d == rhs.item.d && lhs.item.index == rhs.item.index;
+ }
+
+ static Qt::strong_ordering compareThreeWay_helper(const iterator &lhs,
+ const iterator &rhs) noexcept
+ {
+ Q_ASSERT(lhs.item.d == rhs.item.d);
+ return Qt::compareThreeWay(lhs.item.index, rhs.item.index);
+ }
+ static Qt::strong_ordering compareThreeWay_helper(const iterator &lhs,
+ const const_iterator &rhs) noexcept
+ {
+ Q_ASSERT(lhs.item.d == rhs.item.d);
+ return Qt::compareThreeWay(lhs.item.index, rhs.item.index);
+ }
+
+ // Compare friends
+ friend bool comparesEqual(const iterator &lhs, const iterator &rhs) noexcept
+ {
+ return comparesEqual_helper(lhs, rhs);
+ }
+ friend Qt::strong_ordering compareThreeWay(const iterator &lhs,
+ const iterator &rhs) noexcept
+ {
+ return compareThreeWay_helper(lhs, rhs);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(iterator)
+
+ friend bool comparesEqual(const iterator &lhs, const const_iterator &rhs) noexcept
+ {
+ return comparesEqual_helper(lhs, rhs);
+ }
+ friend Qt::strong_ordering compareThreeWay(const iterator &lhs,
+ const const_iterator &rhs) noexcept
+ {
+ return compareThreeWay_helper(lhs, rhs);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(iterator, const_iterator)
};
friend class iterator;
@@ -174,17 +219,17 @@ public:
inline const QJsonValueConstRef operator*() const { return item; }
inline const QJsonValueConstRef *operator->() const { return &item; }
inline QJsonValueConstRef operator[](qsizetype j) const { return *(*this + j); }
-
+#if QT_CORE_REMOVED_SINCE(6, 8)
inline bool operator==(const const_iterator &other) const
{ return item.d == other.item.d && item.index == other.item.index; }
- inline bool operator!=(const const_iterator &other) const { return !(*this == other); }
+ inline bool operator!=(const const_iterator &other) const { return !operator==(other); }
bool operator<(const const_iterator& other) const
{ Q_ASSERT(item.d == other.item.d); return item.index < other.item.index; }
bool operator<=(const const_iterator& other) const
{ Q_ASSERT(item.d == other.item.d); return item.index <= other.item.index; }
- bool operator>(const const_iterator& other) const { return !(*this <= other); }
- bool operator>=(const const_iterator& other) const { return !(*this < other); }
-
+ bool operator>(const const_iterator& other) const { return !operator<=(other); }
+ bool operator>=(const const_iterator& other) const { return !operator<(other); }
+#endif
inline const_iterator &operator++() { ++item.index; return *this; }
inline const_iterator operator++(int) { const_iterator r = *this; ++item.index; return r; }
inline const_iterator &operator--() { --item.index; return *this; }
@@ -194,16 +239,43 @@ public:
inline const_iterator &operator+=(qsizetype j) { item.index += quint64(j); return *this; }
inline const_iterator &operator-=(qsizetype j) { item.index -= quint64(j); return *this; }
qsizetype operator-(const_iterator j) const { return item.index - j.item.index; }
-
+#if QT_CORE_REMOVED_SINCE(6, 8)
inline bool operator==(const iterator &other) const
{ return item.d == other.item.d && item.index == other.item.index; }
- inline bool operator!=(const iterator &other) const { return !(*this == other); }
+ inline bool operator!=(const iterator &other) const { return !operator==(other); }
bool operator<(const iterator& other) const
{ Q_ASSERT(item.d == other.item.d); return item.index < other.item.index; }
bool operator<=(const iterator& other) const
{ Q_ASSERT(item.d == other.item.d); return item.index <= other.item.index; }
- bool operator>(const iterator& other) const { return !(*this <= other); }
- bool operator>=(const iterator& other) const { return !(*this < other); }
+ bool operator>(const iterator& other) const { return !operator<=(other); }
+ bool operator>=(const iterator& other) const { return !operator<(other); }
+#endif
+
+ private:
+ // Helper functions
+ static bool comparesEqual_helper(const const_iterator &lhs,
+ const const_iterator &rhs) noexcept
+ {
+ return lhs.item.d == rhs.item.d && lhs.item.index == rhs.item.index;
+ }
+ static Qt::strong_ordering compareThreeWay_helper(const const_iterator &lhs,
+ const const_iterator &rhs) noexcept
+ {
+ Q_ASSERT(lhs.item.d == rhs.item.d);
+ return Qt::compareThreeWay(lhs.item.index, rhs.item.index);
+ }
+
+ // Compare friends
+ friend bool comparesEqual(const const_iterator &lhs, const const_iterator &rhs) noexcept
+ {
+ return comparesEqual_helper(lhs, rhs);
+ }
+ friend Qt::strong_ordering compareThreeWay(const const_iterator &lhs,
+ const const_iterator &rhs) noexcept
+ {
+ return compareThreeWay_helper(lhs, rhs);
+ }
+ Q_DECLARE_STRONGLY_ORDERED(const_iterator)
};
friend class const_iterator;
@@ -219,12 +291,10 @@ public:
// more Qt
typedef iterator Iterator;
typedef const_iterator ConstIterator;
-#if QT_STRINGVIEW_LEVEL < 2
iterator find(const QString &key);
const_iterator find(const QString &key) const { return constFind(key); }
const_iterator constFind(const QString &key) const;
iterator insert(const QString &key, const QJsonValue &value);
-#endif
iterator find(QStringView key);
iterator find(QLatin1StringView key);
const_iterator find(QStringView key) const { return constFind(key); }
@@ -242,6 +312,21 @@ public:
inline bool empty() const { return isEmpty(); }
private:
+ friend Q_CORE_EXPORT bool comparesEqual(const QJsonObject &lhs,
+ const QJsonObject &rhs) noexcept;
+ friend bool comparesEqual(const QJsonObject &lhs,
+ const QJsonValue &rhs) noexcept
+ {
+ return comparesEqual(lhs, rhs.toObject());
+ }
+ friend bool comparesEqual(const QJsonObject &lhs,
+ const QJsonValueConstRef &rhs) noexcept
+ {
+ return comparesEqual(lhs, rhs.toObject());
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(QJsonObject)
+ Q_DECLARE_EQUALITY_COMPARABLE(QJsonObject, QJsonValue)
+ Q_DECLARE_EQUALITY_COMPARABLE(QJsonObject, QJsonValueConstRef)
friend class QJsonValue;
friend class QJsonDocument;
friend class QJsonPrivate::Value;