QDataStream: add operator<< and >> for std::nullptr_t
std::nullptr_t is nullary: it accepts only one value, nullptr. So we don't need to read or write anything. This commit simply adds the two operators that allow generic code to operate on std::nullptr_t if required. This commit also adds the actual use to QMetaType::load/save, even though there's no change in behavior. [ChangeLog][QtCore][QDataStream] Added operator<< and operator>> overloads that take std::nullptr_t, to facilitate generic code. Change-Id: Iae839f6a131a4f0784bffffd14aa37e7f62d2740 Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Lars Knoll <lars.knoll@qt.io>bb10
parent
25d1bbb849
commit
795a54ff96
|
|
@ -770,6 +770,17 @@ int QDataStream::readBlock(char *data, int len)
|
|||
return readResult;
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn QDataStream &QDataStream::operator>>(std::nullptr &ptr)
|
||||
\since 5.9
|
||||
\overload
|
||||
|
||||
Simulates reading a \c{std::nullptr_t} from the stream into \a ptr and
|
||||
returns a reference to the stream. This function does not actually read
|
||||
anything from the stream, as \c{std::nullptr_t} values are stored as 0
|
||||
bytes.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QDataStream &QDataStream::operator>>(quint8 &i)
|
||||
\overload
|
||||
|
|
@ -1084,6 +1095,15 @@ int QDataStream::readRawData(char *s, int len)
|
|||
QDataStream write functions
|
||||
*****************************************************************************/
|
||||
|
||||
/*!
|
||||
\fn QDataStream &QDataStream::operator<<(std::nullptr ptr)
|
||||
\since 5.9
|
||||
\overload
|
||||
|
||||
Simulates writing a \c{std::nullptr_t}, \a ptr, to the stream and returns a
|
||||
reference to the stream. This function does not actually write anything to
|
||||
the stream, as \c{std::nullptr_t} values are stored as 0 bytes.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QDataStream &QDataStream::operator<<(quint8 i)
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@ public:
|
|||
QDataStream &operator>>(quint32 &i);
|
||||
QDataStream &operator>>(qint64 &i);
|
||||
QDataStream &operator>>(quint64 &i);
|
||||
QDataStream &operator>>(std::nullptr_t &ptr) { ptr = nullptr; return *this; }
|
||||
|
||||
QDataStream &operator>>(bool &i);
|
||||
QDataStream &operator>>(qfloat16 &f);
|
||||
|
|
@ -167,6 +168,7 @@ public:
|
|||
QDataStream &operator<<(quint32 i);
|
||||
QDataStream &operator<<(qint64 i);
|
||||
QDataStream &operator<<(quint64 i);
|
||||
QDataStream &operator<<(std::nullptr_t) { return *this; }
|
||||
QDataStream &operator<<(bool i);
|
||||
QDataStream &operator<<(qfloat16 f);
|
||||
QDataStream &operator<<(float f);
|
||||
|
|
|
|||
|
|
@ -1350,6 +1350,7 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data)
|
|||
case QMetaType::QJsonDocument:
|
||||
return false;
|
||||
case QMetaType::Nullptr:
|
||||
stream << *static_cast<const std::nullptr_t *>(data);
|
||||
return true;
|
||||
case QMetaType::Long:
|
||||
stream << qlonglong(*static_cast<const long *>(data));
|
||||
|
|
@ -1573,6 +1574,7 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
|
|||
case QMetaType::QJsonDocument:
|
||||
return false;
|
||||
case QMetaType::Nullptr:
|
||||
stream >> *static_cast<std::nullptr_t *>(data);
|
||||
return true;
|
||||
case QMetaType::Long: {
|
||||
qlonglong l;
|
||||
|
|
|
|||
|
|
@ -77,6 +77,9 @@ private slots:
|
|||
void stream_QDateTime_data();
|
||||
void stream_QDateTime();
|
||||
|
||||
void stream_nullptr_t_data();
|
||||
void stream_nullptr_t();
|
||||
|
||||
void stream_QFont_data();
|
||||
void stream_QFont();
|
||||
|
||||
|
|
@ -187,6 +190,7 @@ private:
|
|||
void writeQBrush(QDataStream *s);
|
||||
void writeQColor(QDataStream *s);
|
||||
void writeQByteArray(QDataStream *s);
|
||||
void writenullptr_t(QDataStream *s);
|
||||
#ifndef QT_NO_CURSOR
|
||||
void writeQCursor(QDataStream *s);
|
||||
#endif
|
||||
|
|
@ -216,6 +220,7 @@ private:
|
|||
void readQBrush(QDataStream *s);
|
||||
void readQColor(QDataStream *s);
|
||||
void readQByteArray(QDataStream *s);
|
||||
void readnullptr_t(QDataStream *s);
|
||||
#ifndef QT_NO_CURSOR
|
||||
void readQCursor(QDataStream *s);
|
||||
#endif
|
||||
|
|
@ -1008,6 +1013,11 @@ void tst_QDataStream::writeQByteArray(QDataStream *s)
|
|||
*s << d4;
|
||||
}
|
||||
|
||||
void tst_QDataStream::writenullptr_t(QDataStream *s)
|
||||
{
|
||||
*s << nullptr;
|
||||
}
|
||||
|
||||
void tst_QDataStream::readQByteArray(QDataStream *s)
|
||||
{
|
||||
QByteArray test(qByteArrayData(dataIndex(QTest::currentDataTag())));
|
||||
|
|
@ -1016,6 +1026,13 @@ void tst_QDataStream::readQByteArray(QDataStream *s)
|
|||
QCOMPARE(d4, test);
|
||||
}
|
||||
|
||||
void tst_QDataStream::readnullptr_t(QDataStream *s)
|
||||
{
|
||||
std::nullptr_t ptr;
|
||||
*s >> ptr;
|
||||
QCOMPARE(ptr, nullptr);
|
||||
}
|
||||
|
||||
// ************************************
|
||||
#ifndef QT_NO_CURSOR
|
||||
static QCursor qCursorData(int index)
|
||||
|
|
@ -1263,6 +1280,17 @@ void tst_QDataStream::stream_QDateTime()
|
|||
STREAM_IMPL(QDateTime);
|
||||
}
|
||||
|
||||
void tst_QDataStream::stream_nullptr_t_data()
|
||||
{
|
||||
stream_data(1); // there's only one value possible
|
||||
}
|
||||
|
||||
void tst_QDataStream::stream_nullptr_t()
|
||||
{
|
||||
using namespace std;
|
||||
STREAM_IMPL(nullptr_t);
|
||||
}
|
||||
|
||||
void tst_QDataStream::writeQDateTime(QDataStream *s)
|
||||
{
|
||||
QDateTime dt(qDateTimeData(dataIndex(QTest::currentDataTag())));
|
||||
|
|
|
|||
Loading…
Reference in New Issue