Add QDataStream operators to QMargins, so it can be streamed
authorSteven Ceuppens <steven.ceuppens@cense.be>
Tue, 25 Oct 2011 10:19:19 +0000 (12:19 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 27 Oct 2011 11:32:01 +0000 (13:32 +0200)
 * QDataStream format documented
 * Added Unit test for QDataStream operators

 * Updated Unit test

Change-Id: Idbcfcb0b927e6369e8d31b57693c7aa0d1a154e7
Reviewed-by: Olivier Goffart <ogoffart@kde.org>
doc/src/network/files-and-resources/datastreamformat.qdoc
src/corelib/tools/qmargins.cpp
src/corelib/tools/qmargins.h
tests/auto/corelib/tools/qmargins/tst_qmargins.cpp

index 6fe888b..69f49d8 100644 (file)
             \o The number of items (quint32)
             \o For all items, the key (Key) and value (T)
             \endlist
+    \row \o QMargins
+         \o \list
+            \o left (int)
+            \o top (int)
+            \o right (int)
+            \o bottom (int)
+            \endlist
     \row \o QMatrix
          \o \list
             \o m11 (double)
index 7e62a62..9c7dd03 100644 (file)
@@ -156,6 +156,47 @@ QT_BEGIN_NAMESPACE
     Returns true if \a m1 and \a m2 are different; otherwise returns false.
 */
 
+/*****************************************************************************
+  QMargins stream functions
+ *****************************************************************************/
+#ifndef QT_NO_DATASTREAM
+/*!
+    \fn QDataStream &operator<<(QDataStream &stream, const QMargins &m)
+    \relates QMargins
+
+    Writes the given \a margin to the given \a stream and returns a
+    reference to the stream.
+
+    \sa {Serializing Qt Data Types}
+*/
+
+QDataStream &operator<<(QDataStream &s, const QMargins &m)
+{
+    s << m.left() << m.top() << m.right() << m.bottom();
+    return s;
+}
+
+/*!
+    \fn QDataStream &operator>>(QDataStream &stream, QMargins &m)
+    \relates QMargins
+
+    Reads a margin from the given \a stream into the given \a margin
+    and returns a reference to the stream.
+
+    \sa {Serializing Qt Data Types}
+*/
+
+QDataStream &operator>>(QDataStream &s, QMargins &m)
+{
+    int left, top, right, bottom;
+    s >> left; m.setLeft(left);
+    s >> top; m.setTop(top);
+    s >> right; m.setRight(right);
+    s >> bottom; m.setBottom(bottom);
+    return s;
+}
+#endif // QT_NO_DATASTREAM
+
 #ifndef QT_NO_DEBUG_STREAM
 QDebug operator<<(QDebug dbg, const QMargins &m) {
     dbg.nospace() << "QMargins(" << m.left() << ", "
index f8404ca..635ac56 100644 (file)
@@ -81,6 +81,14 @@ private:
 Q_DECLARE_TYPEINFO(QMargins, Q_MOVABLE_TYPE);
 
 /*****************************************************************************
+  QMargins stream functions
+ *****************************************************************************/
+#ifndef QT_NO_DATASTREAM
+Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QMargins &);
+Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QMargins &);
+#endif
+
+/*****************************************************************************
   QMargins inline functions
  *****************************************************************************/
 
index c7632d1..cb0dd2d 100644 (file)
@@ -61,6 +61,7 @@ public slots:
     void cleanup();
 private slots:
     void getSetCheck();
+    void dataStreamCheck();
 };
 
 // Testing get/set functions
@@ -86,6 +87,31 @@ void tst_QMargins::getSetCheck()
     QCOMPARE(margins, QMargins(5, 0, 5, 0));
 } 
 
+// Testing QDataStream operators
+void tst_QMargins::dataStreamCheck()
+{
+    QByteArray buffer;
+
+    // stream out
+    {
+        QMargins marginsOut(0,INT_MIN,INT_MAX,6852);
+        QDataStream streamOut(&buffer, QIODevice::WriteOnly);
+        streamOut << marginsOut;
+    }
+
+    // stream in & compare
+    {
+        QMargins marginsIn;
+        QDataStream streamIn(&buffer, QIODevice::ReadOnly);
+        streamIn >> marginsIn;
+
+        QCOMPARE(marginsIn.left(), 0);
+        QCOMPARE(marginsIn.top(), INT_MIN);
+        QCOMPARE(marginsIn.right(), INT_MAX);
+        QCOMPARE(marginsIn.bottom(), 6852);
+    }
+}
+
 tst_QMargins::tst_QMargins()
 {
 }