Add QDataStream streaming operator for QFlags

We're already using it, for example in qpaintengine_pic.cpp:502:
         d->s << p << ti.text() << fnt << ti.renderFlags() << [...]
                                             ^

[ChangeLog][QtCore][QFlags] Added operator<< and operator>> for
streaming QFlags into and out of QDataStreams.

Change-Id: I33dc971f005a4848bb8ffffd1478e79d6102d1bc
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This commit is contained in:
Thiago Macieira 2016-09-29 14:12:21 -07:00
parent dee16fe491
commit 7314c53d31
2 changed files with 12 additions and 0 deletions

View File

@ -48,6 +48,8 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QDataStream;
class QFlag class QFlag
{ {
int i; int i;
@ -95,6 +97,8 @@ class QFlags
struct Private; struct Private;
typedef int (Private::*Zero); typedef int (Private::*Zero);
template <typename E> friend QDataStream &operator>>(QDataStream &, QFlags<E> &);
template <typename E> friend QDataStream &operator<<(QDataStream &, QFlags<E>);
public: public:
#if defined(Q_CC_MSVC) || defined(Q_QDOC) #if defined(Q_CC_MSVC) || defined(Q_QDOC)
// see above for MSVC // see above for MSVC

View File

@ -359,6 +359,14 @@ inline QDataStream &QDataStream::operator<<(quint32 i)
inline QDataStream &QDataStream::operator<<(quint64 i) inline QDataStream &QDataStream::operator<<(quint64 i)
{ return *this << qint64(i); } { return *this << qint64(i); }
template <typename Enum>
inline QDataStream &operator<<(QDataStream &s, QFlags<Enum> e)
{ return s << e.i; }
template <typename Enum>
inline QDataStream &operator>>(QDataStream &s, QFlags<Enum> &e)
{ return s >> e.i; }
template <typename T> template <typename T>
inline QDataStream &operator>>(QDataStream &s, QList<T> &l) inline QDataStream &operator>>(QDataStream &s, QList<T> &l)
{ {