From 5838074912905686475a2cb4ae9780c2532d424b Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 10 Nov 2022 13:16:14 -0800 Subject: [PATCH] qfloat16: add QTextStream & QDebug streaming operators Change-Id: Ieba79baf5ac34264a988fffd172655bdcaf12a59 Reviewed-by: Allan Sandfeld Jensen --- src/corelib/global/qfloat16.cpp | 13 +++++++++++ src/corelib/global/qfloat16.h | 3 +++ src/corelib/io/qdebug.h | 1 + src/corelib/serialization/qtextstream.h | 1 + .../corelib/global/qfloat16/tst_qfloat16.cpp | 22 +++++++++++++++++++ 5 files changed, 40 insertions(+) diff --git a/src/corelib/global/qfloat16.cpp b/src/corelib/global/qfloat16.cpp index 38ac7635193..b8e7cbe928f 100644 --- a/src/corelib/global/qfloat16.cpp +++ b/src/corelib/global/qfloat16.cpp @@ -398,6 +398,19 @@ QDataStream &operator>>(QDataStream &ds, qfloat16 &f) } #endif +QTextStream &operator>>(QTextStream &ts, qfloat16 &f16) +{ + float f; + ts >> f; + f16 = qfloat16(f); + return ts; +} + +QTextStream &operator<<(QTextStream &ts, qfloat16 f) +{ + return ts << float(f); +} + QT_END_NAMESPACE #include "qfloat16tables.cpp" diff --git a/src/corelib/global/qfloat16.h b/src/corelib/global/qfloat16.h index 02ad5f303fe..89919f4e907 100644 --- a/src/corelib/global/qfloat16.h +++ b/src/corelib/global/qfloat16.h @@ -40,6 +40,7 @@ QT_BEGIN_NAMESPACE #ifndef QT_NO_DATASTREAM class QDataStream; #endif +class QTextStream; class qfloat16 { @@ -223,6 +224,8 @@ QT_WARNING_POP friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &ds, qfloat16 f); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &ds, qfloat16 &f); #endif + friend Q_CORE_EXPORT QTextStream &operator<<(QTextStream &ts, qfloat16 f); + friend Q_CORE_EXPORT QTextStream &operator>>(QTextStream &ts, qfloat16 &f); }; Q_DECLARE_TYPEINFO(qfloat16, Q_PRIMITIVE_TYPE); diff --git a/src/corelib/io/qdebug.h b/src/corelib/io/qdebug.h index 2dc00d8dc35..eccd063ba3e 100644 --- a/src/corelib/io/qdebug.h +++ b/src/corelib/io/qdebug.h @@ -108,6 +108,7 @@ public: inline QDebug &operator<<(unsigned long t) { stream->ts << t; return maybeSpace(); } inline QDebug &operator<<(qint64 t) { stream->ts << t; return maybeSpace(); } inline QDebug &operator<<(quint64 t) { stream->ts << t; return maybeSpace(); } + inline QDebug &operator<<(qfloat16 t) { stream->ts << t; return maybeSpace(); } inline QDebug &operator<<(float t) { stream->ts << t; return maybeSpace(); } inline QDebug &operator<<(double t) { stream->ts << t; return maybeSpace(); } inline QDebug &operator<<(const char* t) { stream->ts << QString::fromUtf8(t); return maybeSpace(); } diff --git a/src/corelib/serialization/qtextstream.h b/src/corelib/serialization/qtextstream.h index e1768789c06..b29ba5ba272 100644 --- a/src/corelib/serialization/qtextstream.h +++ b/src/corelib/serialization/qtextstream.h @@ -4,6 +4,7 @@ #ifndef QTEXTSTREAM_H #define QTEXTSTREAM_H +#include #include #include #include diff --git a/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp index 39470b7d30a..9acbc2099aa 100644 --- a/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp +++ b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp @@ -4,6 +4,7 @@ #include #include +#include #include @@ -42,6 +43,7 @@ private slots: void limits(); void mantissaOverflow(); void dataStream(); + void textStream(); }; void tst_qfloat16::fuzzyCompare_data() @@ -656,5 +658,25 @@ void tst_qfloat16::dataStream() QCOMPARE(zero, qfloat16(0)); } +void tst_qfloat16::textStream() +{ + QString buffer; + { + QTextStream ts(&buffer); + ts << qfloat16(0) << Qt::endl << qfloat16(1.5); + QCOMPARE(ts.status(), QTextStream::Ok); + } + QCOMPARE(buffer, "0\n1.5"); + + { + QTextStream ts(&buffer); + qfloat16 zero = qfloat16(-2.5), threehalves = 1234; + ts >> zero >> threehalves; + QCOMPARE(ts.status(), QTextStream::Ok); + QCOMPARE(zero, qfloat16(0)); + QCOMPARE(threehalves, 1.5); + } +} + QTEST_APPLESS_MAIN(tst_qfloat16) #include "tst_qfloat16.moc"