From cdc3de6c84383c77b93c6ae834f17a75f9092330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Mon, 22 Nov 2021 15:39:32 +0100 Subject: QStringBuilder: Add support for QByteArrayView [ChangeLog][QtCore][QStringBuilder] Added support for QByteArrayView. Change-Id: If2c23549d533dd31c320f3ee455fcd01ea5b460a Reviewed-by: Marc Mutz --- src/corelib/text/qstringbuilder.h | 21 +++++++++++++++++++++ .../qstringbuilder1/stringbuilder.cpp | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/src/corelib/text/qstringbuilder.h b/src/corelib/text/qstringbuilder.h index 8494459d63..f3cbba26dd 100644 --- a/src/corelib/text/qstringbuilder.h +++ b/src/corelib/text/qstringbuilder.h @@ -187,6 +187,27 @@ template <> struct QConcatenable : private QAbstractConcatenable { *out++ = c; } }; +template <> struct QConcatenable : private QAbstractConcatenable +{ + typedef QByteArrayView type; + typedef QByteArray ConvertTo; + enum { ExactSize = true }; + static qsizetype size(QByteArrayView bav) { return bav.size(); } +#ifndef QT_NO_CAST_FROM_ASCII + QT_ASCII_CAST_WARN static inline void appendTo(QByteArrayView bav, QChar *&out) + { + QAbstractConcatenable::convertFromUtf8(bav, out); + } +#endif + static inline void appendTo(QByteArrayView bav, char *&out) + { + qsizetype n = bav.size(); + if (n) + memcpy(out, bav.data(), n); + out += n; + } +}; + template <> struct QConcatenable : private QAbstractConcatenable { typedef char16_t type; diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp b/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp index 66dfe3ce58..4d7e452e6f 100644 --- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp +++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp @@ -305,6 +305,10 @@ void runScenario() QCOMPARE(r, ba); r = zero P ba; QCOMPARE(r, ba); + + QByteArrayView qbav = LITERAL; + superba = qbav P qbav P LITERAL; + QCOMPARE(superba, QByteArray(LITERAL LITERAL LITERAL)); } //operator QString += -- cgit v1.2.3