diff options
Diffstat (limited to 'src/corelib/serialization/qdatastream.h')
-rw-r--r-- | src/corelib/serialization/qdatastream.h | 75 |
1 files changed, 40 insertions, 35 deletions
diff --git a/src/corelib/serialization/qdatastream.h b/src/corelib/serialization/qdatastream.h index 4d827772c8..270267e29e 100644 --- a/src/corelib/serialization/qdatastream.h +++ b/src/corelib/serialization/qdatastream.h @@ -43,6 +43,7 @@ #include <QtCore/qscopedpointer.h> #include <QtCore/qiodevice.h> #include <QtCore/qpair.h> +#include <QtCore/qcontainerfwd.h> #ifdef Status #error qdatastream.h must be included before any header file that defines Status @@ -54,12 +55,6 @@ class qfloat16; class QByteArray; class QIODevice; -template <typename T> class QList; -template <typename T> class QVector; -template <typename T> class QSet; -template <class Key, class T> class QHash; -template <class Key, class T> class QMap; - #if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED) class QDataStreamPrivate; namespace QtPrivate { @@ -301,10 +296,7 @@ QDataStream &readAssociativeContainer(QDataStream &s, Container &c) c.clear(); break; } -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED - c.insertMulti(k, t); -QT_WARNING_POP + c.insert(k, t); } return s; @@ -324,19 +316,20 @@ template <typename Container> QDataStream &writeAssociativeContainer(QDataStream &s, const Container &c) { s << quint32(c.size()); -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && QT_DEPRECATED_SINCE(5, 15) - // Deserialization should occur in the reverse order. - // Otherwise, value() will return the least recently inserted - // value instead of the most recently inserted one. - auto it = c.constEnd(); - auto begin = c.constBegin(); - while (it != begin) { - QT_WARNING_PUSH - QT_WARNING_DISABLE_DEPRECATED - --it; - QT_WARNING_POP + auto it = c.constBegin(); + auto end = c.constEnd(); + while (it != end) { s << it.key() << it.value(); -#else + ++it; + } + + return s; +} + +template <typename Container> +QDataStream &writeAssociativeMultiContainer(QDataStream &s, const Container &c) +{ + s << quint32(c.size()); auto it = c.constBegin(); auto end = c.constEnd(); while (it != end) { @@ -348,7 +341,6 @@ QDataStream &writeAssociativeContainer(QDataStream &s, const Container &c) auto next = std::next(rangeStart, i); s << next.key() << next.value(); } -#endif } return s; @@ -414,18 +406,6 @@ typename std::enable_if<std::is_enum<T>::value, QDataStream &>::type& operator>>(QDataStream &s, T &t) { return s >> reinterpret_cast<typename std::underlying_type<T>::type &>(t); } -template <typename T> -inline QDataStream &operator>>(QDataStream &s, QList<T> &l) -{ - return QtPrivate::readArrayBasedContainer(s, l); -} - -template <typename T> -inline QDataStream &operator<<(QDataStream &s, const QList<T> &l) -{ - return QtPrivate::writeSequentialContainer(s, l); -} - template<typename T> inline QDataStream &operator>>(QDataStream &s, QVector<T> &v) { @@ -457,12 +437,25 @@ inline QDataStream &operator>>(QDataStream &s, QHash<Key, T> &hash) } template <class Key, class T> + inline QDataStream &operator<<(QDataStream &s, const QHash<Key, T> &hash) { return QtPrivate::writeAssociativeContainer(s, hash); } template <class Key, class T> +inline QDataStream &operator>>(QDataStream &s, QMultiHash<Key, T> &hash) +{ + return QtPrivate::readAssociativeContainer(s, hash); +} + +template <class Key, class T> +inline QDataStream &operator<<(QDataStream &s, const QMultiHash<Key, T> &hash) +{ + return QtPrivate::writeAssociativeMultiContainer(s, hash); +} + +template <class Key, class T> inline QDataStream &operator>>(QDataStream &s, QMap<Key, T> &map) { return QtPrivate::readAssociativeContainer(s, map); @@ -474,6 +467,18 @@ inline QDataStream &operator<<(QDataStream &s, const QMap<Key, T> &map) return QtPrivate::writeAssociativeContainer(s, map); } +template <class Key, class T> +inline QDataStream &operator>>(QDataStream &s, QMultiMap<Key, T> &map) +{ + return QtPrivate::readAssociativeContainer(s, map); +} + +template <class Key, class T> +inline QDataStream &operator<<(QDataStream &s, const QMultiMap<Key, T> &map) +{ + return QtPrivate::writeAssociativeMultiContainer(s, map); +} + #ifndef QT_NO_DATASTREAM template <class T1, class T2> inline QDataStream& operator>>(QDataStream& s, QPair<T1, T2>& p) |