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.h43
1 files changed, 26 insertions, 17 deletions
diff --git a/src/corelib/serialization/qjsonvalue.h b/src/corelib/serialization/qjsonvalue.h
index 11b9ad1b019..4f9c3af5788 100644
--- a/src/corelib/serialization/qjsonvalue.h
+++ b/src/corelib/serialization/qjsonvalue.h
@@ -160,7 +160,7 @@ public:
inline operator QJsonValue() const { return concrete(*this); }
Q_CORE_EXPORT QVariant toVariant() const;
- QJsonValue::Type type() const { return concrete(*this).type(); }
+ QJsonValue::Type type() const { return concreteType(*this); }
bool isNull() const { return type() == QJsonValue::Null; }
bool isBool() const { return type() == QJsonValue::Bool; }
bool isDouble() const { return type() == QJsonValue::Double; }
@@ -170,15 +170,15 @@ public:
bool isUndefined() const { return type() == QJsonValue::Undefined; }
bool toBool(bool defaultValue = false) const
- { return concrete(*this).toBool(defaultValue); }
+ { return concreteBool(*this, defaultValue); }
int toInt(int defaultValue = 0) const
- { return concrete(*this).toInt(defaultValue); }
+ { return concreteInt(*this, defaultValue, true); }
qint64 toInteger(qint64 defaultValue = 0) const
- { return concrete(*this).toInteger(defaultValue); }
+ { return concreteInt(*this, defaultValue, false); }
double toDouble(double defaultValue = 0) const
- { return concrete(*this).toDouble(defaultValue); }
+ { return concreteDouble(*this, defaultValue); }
QString toString(const QString &defaultValue = {}) const
- { return concrete(*this).toString(defaultValue); }
+ { return concreteString(*this, defaultValue); }
Q_CORE_EXPORT QJsonArray toArray() const;
Q_CORE_EXPORT QJsonObject toObject() const;
@@ -195,6 +195,15 @@ protected:
QJsonValueConstRef(QJsonObject *object, qsizetype idx)
: o(object), is_object(true), index(static_cast<quint64>(idx)) {}
+ Q_CORE_EXPORT static QJsonValue::Type
+ concreteType(QJsonValueConstRef self) noexcept Q_DECL_PURE_FUNCTION;
+ Q_CORE_EXPORT static bool
+ concreteBool(QJsonValueConstRef self, bool defaultValue) noexcept Q_DECL_PURE_FUNCTION;
+ Q_CORE_EXPORT static qint64
+ concreteInt(QJsonValueConstRef self, qint64 defaultValue, bool clamp) noexcept Q_DECL_PURE_FUNCTION;
+ Q_CORE_EXPORT static double
+ concreteDouble(QJsonValueConstRef self, double defaultValue) noexcept Q_DECL_PURE_FUNCTION;
+ Q_CORE_EXPORT static QString concreteString(QJsonValueConstRef self, const QString &defaultValue);
Q_CORE_EXPORT static QJsonValue concrete(QJsonValueConstRef self) noexcept;
union {
@@ -228,7 +237,7 @@ public:
operator QJsonValue() const { return toValue(); }
QVariant toVariant() const;
- inline QJsonValue::Type type() const { return toValue().type(); }
+ inline QJsonValue::Type type() const { return QJsonValueConstRef::type(); }
inline bool isNull() const { return type() == QJsonValue::Null; }
inline bool isBool() const { return type() == QJsonValue::Bool; }
inline bool isDouble() const { return type() == QJsonValue::Double; }
@@ -237,20 +246,20 @@ public:
inline bool isObject() const { return type() == QJsonValue::Object; }
inline bool isUndefined() const { return type() == QJsonValue::Undefined; }
- inline bool toBool(bool defaultValue = false) const { return toValue().toBool(defaultValue); }
- inline int toInt(int defaultValue = 0) const { return toValue().toInt(defaultValue); }
- inline qint64 toInteger(qint64 defaultValue = 0) const { return toValue().toInteger(defaultValue); }
- inline double toDouble(double defaultValue = 0) const { return toValue().toDouble(defaultValue); }
- inline QString toString(const QString &defaultValue = {}) const { return toValue().toString(defaultValue); }
+ inline bool toBool(bool defaultValue = false) const { return QJsonValueConstRef::toBool(defaultValue); }
+ inline int toInt(int defaultValue = 0) const { return QJsonValueConstRef::toInt(defaultValue); }
+ inline qint64 toInteger(qint64 defaultValue = 0) const { return QJsonValueConstRef::toInteger(defaultValue); }
+ inline double toDouble(double defaultValue = 0) const { return QJsonValueConstRef::toDouble(defaultValue); }
+ inline QString toString(const QString &defaultValue = {}) const { return QJsonValueConstRef::toString(defaultValue); }
QJsonArray toArray() const;
QJsonObject toObject() const;
- const QJsonValue operator[](QStringView key) const { return toValue()[key]; }
- const QJsonValue operator[](QLatin1String key) const { return toValue()[key]; }
- const QJsonValue operator[](qsizetype i) const { return toValue()[i]; }
+ const QJsonValue operator[](QStringView key) const { return QJsonValueConstRef::operator[](key); }
+ const QJsonValue operator[](QLatin1String key) const { return QJsonValueConstRef::operator[](key); }
+ const QJsonValue operator[](qsizetype i) const { return QJsonValueConstRef::operator[](i); }
- inline bool operator==(const QJsonValue &other) const { return toValue() == other; }
- inline bool operator!=(const QJsonValue &other) const { return toValue() != other; }
+ inline bool operator==(const QJsonValue &other) const { return QJsonValueConstRef::operator==(other); }
+ inline bool operator!=(const QJsonValue &other) const { return QJsonValueConstRef::operator!=(other); }
private:
QJsonValue toValue() const;