OSDN Git Service

use the QDataStream byteorder member for swap check
authorIvailo Monev <xakepa10@gmail.com>
Sun, 30 Oct 2022 20:30:09 +0000 (22:30 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Sun, 30 Oct 2022 20:30:09 +0000 (22:30 +0200)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/core/io/qdatastream.cpp
src/core/io/qdatastream.h
tests/auto/qdatastream/tst_qdatastream.cpp

index 3fd8a7a..04e86c5 100644 (file)
@@ -226,7 +226,6 @@ QT_BEGIN_NAMESPACE
 QDataStream::QDataStream()
     : dev(nullptr),
     owndev(false),
-    noswap(QDataStream::HostEndian == QDataStream::BigEndian),
     byteorder(QDataStream::BigEndian),
     q_status(QDataStream::Ok),
     floatingPrecision(QDataStream::DoublePrecision)
@@ -248,7 +247,6 @@ QDataStream::QDataStream()
 QDataStream::QDataStream(QIODevice *device)
     : dev(device),
     owndev(false),
-    noswap(QDataStream::HostEndian == QDataStream::BigEndian),
     byteorder(QDataStream::BigEndian),
     q_status(QDataStream::Ok),
     floatingPrecision(QDataStream::DoublePrecision)
@@ -272,7 +270,6 @@ QDataStream::QDataStream(QIODevice *device)
 QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode flags)
     : dev(nullptr),
     owndev(true),
-    noswap(QDataStream::HostEndian == QDataStream::BigEndian),
     byteorder(QDataStream::BigEndian),
     q_status(QDataStream::Ok),
     floatingPrecision(QDataStream::DoublePrecision)
@@ -296,7 +293,6 @@ QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode flags)
 QDataStream::QDataStream(const QByteArray &a)
     : dev(nullptr),
     owndev(true),
-    noswap(QDataStream::HostEndian == QDataStream::BigEndian),
     byteorder(QDataStream::BigEndian),
     q_status(QDataStream::Ok),
     floatingPrecision(QDataStream::DoublePrecision)
@@ -462,7 +458,6 @@ void QDataStream::setStatus(DataStatus status)
 void QDataStream::setByteOrder(ByteOrder bo)
 {
     byteorder = bo;
-    noswap = (byteorder == QDataStream::HostEndian);
 }
 
 /*****************************************************************************
@@ -517,7 +512,7 @@ QDataStream &QDataStream::operator>>(qint16 &i)
     if (dev->read((char *)&i, sizeof(qint16)) != sizeof(qint16)) {
         i = 0;
         setStatus(ReadPastEnd);
-    } else if (!noswap) {
+    } else if (byteorder != QDataStream::HostEndian) {
         i = qbswap(i);
     }
     return *this;
@@ -546,7 +541,7 @@ QDataStream &QDataStream::operator>>(qint32 &i)
     if (dev->read((char *)&i, sizeof(qint32)) != sizeof(qint32)) {
         i = 0;
         setStatus(ReadPastEnd);
-    } else if (!noswap) {
+    } else if (byteorder != QDataStream::HostEndian) {
         i = qbswap(i);
     }
     return *this;
@@ -574,7 +569,7 @@ QDataStream &QDataStream::operator>>(qint64 &i)
     if (dev->read((char *)&i, sizeof(qint64)) != sizeof(qint64)) {
         i = qint64(0);
         setStatus(ReadPastEnd);
-    } else if (!noswap) {
+    } else if (byteorder != QDataStream::HostEndian) {
         i = qbswap(i);
     }
     return *this;
@@ -616,7 +611,7 @@ QDataStream &QDataStream::operator>>(float &f)
     if (dev->read((char *)&f, sizeof(float)) != sizeof(float)) {
         f = 0.0f;
         setStatus(ReadPastEnd);
-    } else if (!noswap) {
+    } else if (byteorder != QDataStream::HostEndian) {
         union {
             float val1;
             quint32 val2;
@@ -651,7 +646,7 @@ QDataStream &QDataStream::operator>>(double &f)
     if (dev->read((char *)&f, sizeof(double)) != sizeof(double)) {
         f = 0.0;
         setStatus(ReadPastEnd);
-    } else if (!noswap) {
+    } else if (byteorder != QDataStream::HostEndian) {
         union {
             double val1;
             quint64 val2;
@@ -783,7 +778,7 @@ QDataStream &QDataStream::operator<<(qint8 i)
 QDataStream &QDataStream::operator<<(qint16 i)
 {
     CHECK_STREAM_WRITE_PRECOND(*this)
-    if (!noswap) {
+    if (byteorder != QDataStream::HostEndian) {
         i = qbswap(i);
     }
     if (dev->write((char *)&i, sizeof(qint16)) != sizeof(qint16))
@@ -801,7 +796,7 @@ QDataStream &QDataStream::operator<<(qint16 i)
 QDataStream &QDataStream::operator<<(qint32 i)
 {
     CHECK_STREAM_WRITE_PRECOND(*this)
-    if (!noswap) {
+    if (byteorder != QDataStream::HostEndian) {
         i = qbswap(i);
     }
     if (dev->write((char *)&i, sizeof(qint32)) != sizeof(qint32))
@@ -827,7 +822,7 @@ QDataStream &QDataStream::operator<<(qint32 i)
 QDataStream &QDataStream::operator<<(qint64 i)
 {
     CHECK_STREAM_WRITE_PRECOND(*this)
-    if (!noswap) {
+    if (byteorder != QDataStream::HostEndian) {
         i = qbswap(i);
     }
     if (dev->write((char *)&i, sizeof(qint64)) != sizeof(qint64))
@@ -874,7 +869,7 @@ QDataStream &QDataStream::operator<<(float f)
 
     CHECK_STREAM_WRITE_PRECOND(*this)
     float g = f;                                // fixes float-on-stack problem
-    if (!noswap) {
+    if (byteorder != QDataStream::HostEndian) {
         union {
             float val1;
             quint32 val2;
@@ -910,7 +905,7 @@ QDataStream &QDataStream::operator<<(double f)
     }
 
     CHECK_STREAM_WRITE_PRECOND(*this)
-    if (noswap) {
+    if (byteorder == QDataStream::HostEndian) {
         if (dev->write((char *)&f, sizeof(double)) != sizeof(double))
             q_status = WriteFailed;
     } else {
index e1e2f6f..bd58327 100644 (file)
@@ -117,7 +117,6 @@ private:
 
     QIODevice *dev;
     bool owndev;
-    bool noswap;
     ByteOrder byteorder;
     DataStatus q_status;
     FloatingPointPrecision floatingPrecision;
index 77a988b..d1f9072 100644 (file)
@@ -310,15 +310,15 @@ void tst_QDataStream::stream_data(int noOfElements)
     QTest::addColumn<QString>("byteOrder");
 
     for (int d=0; devices[d] != 0; d++) {
-       QString device = devices[d];
-       for (int b=0; b<2; b++) {
-           QString byte_order = b == 0 ? "BigEndian" : "LittleEndian";
-
-           QString tag = device + "_" + byte_order;
-           for (int e=0; e<noOfElements; e++) {
-               QTest::newRow(qPrintable(tag + QString("_%1").arg(e))) << device << QString(byte_order);
-           }
-       }
+        QString device = devices[d];
+        for (int b=0; b<2; b++) {
+            QString byte_order = b == 0 ? "BigEndian" : "LittleEndian";
+
+            QString tag = device + "_" + byte_order;
+            for (int e=0; e<noOfElements; e++) {
+                QTest::newRow(qPrintable(tag + QString("_%1").arg(e))) << device << QString(byte_order);
+            }
+        }
     }
 }
 static const QString open_png = QFile::decodeName(SRCDIR "/open.png");
@@ -326,35 +326,35 @@ static const QString open_png = QFile::decodeName(SRCDIR "/open.png");
 #define STREAM_IMPL(TYPE) \
     QFETCH(QString, device); \
     if (device == "bytearray") { \
-           QByteArray ba; \
-           QDataStream sout(&ba, QIODevice::WriteOnly); \
-           write##TYPE(&sout); \
-           QDataStream sin(&ba, QIODevice::ReadOnly); \
-           read##TYPE(&sin); \
+            QByteArray ba; \
+            QDataStream sout(&ba, QIODevice::WriteOnly); \
+            write##TYPE(&sout); \
+            QDataStream sin(&ba, QIODevice::ReadOnly); \
+            read##TYPE(&sin); \
     } else if (device == "file") { \
-           QString fileName = "qdatastream.out"; \
-           QFile fOut(fileName); \
-           QVERIFY(fOut.open(QIODevice::WriteOnly)); \
-           QDataStream sout(&fOut); \
-           write##TYPE(&sout); \
-           fOut.close(); \
-           QFile fIn(fileName); \
-           QVERIFY(fIn.open(QIODevice::ReadOnly)); \
-           QDataStream sin(&fIn); \
-           read##TYPE(&sin); \
-           fIn.close(); \
+            QString fileName = "qdatastream.out"; \
+            QFile fOut(fileName); \
+            QVERIFY(fOut.open(QIODevice::WriteOnly)); \
+            QDataStream sout(&fOut); \
+            write##TYPE(&sout); \
+            fOut.close(); \
+            QFile fIn(fileName); \
+            QVERIFY(fIn.open(QIODevice::ReadOnly)); \
+            QDataStream sin(&fIn); \
+            read##TYPE(&sin); \
+            fIn.close(); \
     } else if (device == "buffer") { \
-           QByteArray ba(10000, '\0'); \
-           QBuffer bOut(&ba); \
-           bOut.open(QIODevice::WriteOnly); \
-           QDataStream sout(&bOut); \
-           write##TYPE(&sout); \
-           bOut.close(); \
-           QBuffer bIn(&ba); \
-           bIn.open(QIODevice::ReadOnly); \
-           QDataStream sin(&bIn); \
-           read##TYPE(&sin); \
-           bIn.close(); \
+            QByteArray ba(10000, '\0'); \
+            QBuffer bOut(&ba); \
+            bOut.open(QIODevice::WriteOnly); \
+            QDataStream sout(&bOut); \
+            write##TYPE(&sout); \
+            bOut.close(); \
+            QBuffer bIn(&ba); \
+            bIn.open(QIODevice::ReadOnly); \
+            QDataStream sin(&bIn); \
+            read##TYPE(&sin); \
+            bIn.close(); \
     }
 
 // ************************************
@@ -363,13 +363,13 @@ static QString QStringData(int index)
 {
     switch (index)
     {
-       case 0: return QString();
-       case 1: return QString("");
-       case 2: return QString("A");
-       case 3: return QString("ABCDE FGHI");
-       case 4: return QString("This is a long string");
-       case 5: return QString("And again a string with a \nCRLF");
-       case 6: return QString("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRESTUVWXYZ 1234567890 ~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/");
+        case 0: return QString();
+        case 1: return QString("");
+        case 2: return QString("A");
+        case 3: return QString("ABCDE FGHI");
+        case 4: return QString("This is a long string");
+        case 5: return QString("And again a string with a \nCRLF");
+        case 6: return QString("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRESTUVWXYZ 1234567890 ~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/");
     }
     return QString("foo");
 }