diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2017-02-22 11:49:24 +0000 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2017-04-19 04:50:26 +0000 |
commit | 8a375341cf7a7cf38ef427bc0c9f1abde05a471d (patch) | |
tree | 1b6d3d57b38756228dd5682cc3f0b8a3f7642949 /src/corelib/json/qjsonobject.h | |
parent | 6462f299ed188b3c3494d99d21e6563e37bd78e5 (diff) |
QJson*: value semantics cleanup
Re-add the move operations, add a swap(), mark as shared
(we're already using them in containers).
QJsonValue is slightly tricky, because it has an anonymous union,
which can't be easily moved in C++. Use the implementation of
the copy constructor as inspiration for the move.
[ChangeLog][QtCore][JSON] QJsonArray, QJsonDocument, QJsonObject
and QJsonValue now have move operations and a swap() member function.
Change-Id: Idfb94a93370ace96100efbd6559ef05b4c5adc39
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/json/qjsonobject.h')
-rw-r--r-- | src/corelib/json/qjsonobject.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/corelib/json/qjsonobject.h b/src/corelib/json/qjsonobject.h index e238c84d98..c77e2164a8 100644 --- a/src/corelib/json/qjsonobject.h +++ b/src/corelib/json/qjsonobject.h @@ -74,6 +74,25 @@ public: QJsonObject(const QJsonObject &other); QJsonObject &operator =(const QJsonObject &other); + QJsonObject(QJsonObject &&other) Q_DECL_NOTHROW + : d(other.d), o(other.o) + { + other.d = nullptr; + other.o = nullptr; + } + + QJsonObject &operator =(QJsonObject &&other) Q_DECL_NOTHROW + { + swap(other); + return *this; + } + + void swap(QJsonObject &other) Q_DECL_NOTHROW + { + qSwap(d, other.d); + qSwap(o, other.o); + } + static QJsonObject fromVariantMap(const QVariantMap &map); QVariantMap toVariantMap() const; static QJsonObject fromVariantHash(const QVariantHash &map); @@ -241,6 +260,8 @@ private: QJsonPrivate::Object *o; }; +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonObject) + #if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY) Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &); #endif |