diff options
Diffstat (limited to 'src/corelib/serialization/qjsonvalue.h')
-rw-r--r-- | src/corelib/serialization/qjsonvalue.h | 70 |
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) |