diff options
-rw-r--r-- | src/corelib/text/qstringbuilder.h | 21 | ||||
-rw-r--r-- | tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp | 4 |
2 files changed, 25 insertions, 0 deletions
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<char> : private QAbstractConcatenable { *out++ = c; } }; +template <> struct QConcatenable<QByteArrayView> : 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<char16_t> : 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 += |