summaryrefslogtreecommitdiffstats
path: root/src/corelib/serialization/qjsonvalue.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/serialization/qjsonvalue.h')
-rw-r--r--src/corelib/serialization/qjsonvalue.h70
1 files changed, 44 insertions, 26 deletions
diff --git a/src/corelib/serialization/qjsonvalue.h b/src/corelib/serialization/qjsonvalue.h
index d8ea5e441e..d71dadf837 100644
--- a/src/corelib/serialization/qjsonvalue.h
+++ b/src/corelib/serialization/qjsonvalue.h
@@ -4,10 +4,11 @@
#ifndef QJSONVALUE_H
#define QJSONVALUE_H
+#include <QtCore/qcborvalue.h>
+#include <QtCore/qcompare.h>
#include <QtCore/qglobal.h>
#include <QtCore/qstring.h>
#include <QtCore/qshareddata.h>
-#include <QtCore/qcborvalue.h>
QT_BEGIN_NAMESPACE
@@ -51,8 +52,8 @@ public:
~QJsonValue();
- QJsonValue(const QJsonValue &other);
- QJsonValue &operator =(const QJsonValue &other);
+ QJsonValue(const QJsonValue &other) noexcept;
+ QJsonValue &operator =(const QJsonValue &other) noexcept;
QJsonValue(QJsonValue &&other) noexcept;
@@ -87,17 +88,21 @@ public:
QJsonObject toObject() const;
QJsonObject toObject(const QJsonObject &defaultValue) const;
-#if QT_STRINGVIEW_LEVEL < 2
const QJsonValue operator[](const QString &key) const;
-#endif
const QJsonValue operator[](QStringView key) const;
const QJsonValue operator[](QLatin1StringView key) const;
const QJsonValue operator[](qsizetype i) const;
+#if QT_CORE_REMOVED_SINCE(6, 8)
bool operator==(const QJsonValue &other) const;
bool operator!=(const QJsonValue &other) const;
+#endif
private:
+ friend Q_CORE_EXPORT bool comparesEqual(const QJsonValue &lhs,
+ const QJsonValue &rhs) noexcept;
+ Q_DECLARE_EQUALITY_COMPARABLE(QJsonValue)
+
// avoid implicit conversions from char * to bool
QJsonValue(const void *) = delete;
friend class QJsonPrivate::Value;
@@ -136,7 +141,7 @@ public:
bool toBool(bool defaultValue = false) const
{ return concreteBool(*this, defaultValue); }
int toInt(int defaultValue = 0) const
- { return concreteInt(*this, defaultValue, true); }
+ { return int(concreteInt(*this, defaultValue, true)); }
qint64 toInteger(qint64 defaultValue = 0) const
{ return concreteInt(*this, defaultValue, false); }
double toDouble(double defaultValue = 0) const
@@ -150,10 +155,20 @@ public:
const QJsonValue operator[](QLatin1StringView key) const { return concrete(*this)[key]; }
const QJsonValue operator[](qsizetype i) const { return concrete(*this)[i]; }
- inline bool operator==(const QJsonValue &other) const { return concrete(*this) == other; }
- inline bool operator!=(const QJsonValue &other) const { return concrete(*this) != other; }
-
protected:
+ friend bool comparesEqual(const QJsonValueConstRef &lhs,
+ const QJsonValueConstRef &rhs) noexcept
+ {
+ return comparesEqual(concrete(lhs), concrete(rhs));
+ }
+ friend bool comparesEqual(const QJsonValueConstRef &lhs,
+ const QJsonValue &rhs) noexcept
+ {
+ return comparesEqual(concrete(lhs), rhs);
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(QJsonValueConstRef)
+ Q_DECLARE_EQUALITY_COMPARABLE(QJsonValueConstRef, QJsonValue)
+
Q_CORE_EXPORT static QJsonValue::Type
concreteType(QJsonValueConstRef self) noexcept Q_DECL_PURE_FUNCTION;
Q_CORE_EXPORT static bool
@@ -217,6 +232,8 @@ protected:
friend class QJsonPrivate::Value;
};
+QT_WARNING_PUSH
+QT6_ONLY(QT_WARNING_DISABLE_MSVC(4275)) // non dll-interface class 'QJsonValueConstRef' used as base for dll-interface class 'QJsonValueRef'
class QT6_ONLY(Q_CORE_EXPORT) QJsonValueRef : public QJsonValueConstRef
{
public:
@@ -257,10 +274,25 @@ public:
const QJsonValue operator[](QLatin1StringView key) const { return QJsonValueConstRef::operator[](key); }
const QJsonValue operator[](qsizetype i) const { return QJsonValueConstRef::operator[](i); }
- inline bool operator==(const QJsonValue &other) const { return QJsonValueConstRef::operator==(other); }
- inline bool operator!=(const QJsonValue &other) const { return QJsonValueConstRef::operator!=(other); }
+#if QT_CORE_REMOVED_SINCE(6, 8)
+ inline bool operator==(const QJsonValue &other) const { return comparesEqual(*this, other); }
+ inline bool operator!=(const QJsonValue &other) const { return !comparesEqual(*this, other); }
+#endif
private:
+ friend bool comparesEqual(const QJsonValueRef &lhs,
+ const QJsonValueRef &rhs) noexcept
+ {
+ return comparesEqual(QJsonValue(lhs), QJsonValue(rhs));
+ }
+ friend bool comparesEqual(const QJsonValueRef &lhs,
+ const QJsonValueConstRef &rhs) noexcept
+ {
+ return comparesEqual(QJsonValue(lhs), QJsonValue(rhs));
+ }
+ Q_DECLARE_EQUALITY_COMPARABLE(QJsonValueRef)
+ Q_DECLARE_EQUALITY_COMPARABLE(QJsonValueRef, QJsonValueConstRef)
+
QJsonValue toValue() const;
#else
using QJsonValueConstRef::operator[];
@@ -275,27 +307,13 @@ private:
friend class QJsonArray;
friend class QJsonObject;
};
+QT_WARNING_POP
inline QJsonValue QCborValueConstRef::toJsonValue() const
{
return concrete().toJsonValue();
}
-inline bool operator==(const QJsonValueConstRef &lhs, const QJsonValueRef &rhs)
-{ return QJsonValue(lhs) == QJsonValue(rhs); }
-inline bool operator!=(const QJsonValueConstRef &lhs, const QJsonValueRef &rhs)
-{ return !(lhs == rhs); }
-
-inline bool operator==(const QJsonValueRef &lhs, const QJsonValueConstRef &rhs)
-{ return QJsonValue(lhs) == QJsonValue(rhs); }
-inline bool operator!=(const QJsonValueRef &lhs, const QJsonValueConstRef &rhs)
-{ return !(lhs == rhs); }
-
-inline bool operator==(const QJsonValueRef &lhs, const QJsonValueRef &rhs)
-{ return QJsonValue(lhs) == QJsonValue(rhs); }
-inline bool operator!=(const QJsonValueRef &lhs, const QJsonValueRef &rhs)
-{ return !(lhs == rhs); }
-
Q_CORE_EXPORT size_t qHash(const QJsonValue &value, size_t seed = 0);
#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)