From b57fac818b7fe028dc61f1196cfda397233edffe Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 18 Jul 2024 22:57:10 +0200 Subject: Long live QDebug::toBytes()! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I've seen over and over again how test authors are plagued by the impedance mismatch between their 8-bit actual data and the result of QString::toString() being in UTF-16. They invariably ditch their 8-bit inputs and go to QString, but the mere fact that they start out with 8-bit input and then run into problems means we have a gaping API hole here. QTest::toString() also suffers from this. So add the option to a) construct a QDebug object over a QByteArray (already supported by underlying QTextStream) and b) to stream into QByteArray like toString() streams into QString. Finally, make QTest::toString() use the new toBytes() function instead of the old toString() one. This saves 1% (91122→90248) in tst_tostring exeutable size on optimized Linux AMD64 GCC 9 builds. [ChangeLog][QtCore][QDebug] Added ctor from QByteArray* and a static toBytes() function. Change-Id: I2b021513d6427a1a961f39e751eaf4faaf527ba8 Reviewed-by: Thiago Macieira --- src/corelib/io/qdebug.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/corelib/io/qdebug.cpp') diff --git a/src/corelib/io/qdebug.cpp b/src/corelib/io/qdebug.cpp index 600b8b13b80..1c6aecaaabb 100644 --- a/src/corelib/io/qdebug.cpp +++ b/src/corelib/io/qdebug.cpp @@ -1000,6 +1000,8 @@ QDebug &QDebug::resetFormat() \since 6.0 \include qdebug-toString.qdocinc + + \sa toBytes() */ /*! \internal */ @@ -1013,6 +1015,26 @@ QString QDebug::toStringImpl(StreamTypeErased s, const void *obj) return result; } +/*! + \fn template QByteArray QDebug::toBytes(const T &object) + \since 6.9 + + This is equivalent to \c{QDebug::toString(object).toUtf8()}, but more efficient. + + \sa toString() +*/ + +/*! \internal */ +QByteArray QDebug::toBytesImpl(StreamTypeErased s, const void *obj) +{ + QByteArray result; + { + QDebug d(&result); + s(d.nospace(), obj); + } + return result; +} + /*! \fn template QDebug operator<<(QDebug debug, const QList &list) \relates QDebug -- cgit v1.2.3