summaryrefslogtreecommitdiffstats
path: root/src/corelib/text/qstringconverter.h
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-05-05 15:45:47 +0200
committerLars Knoll <lars.knoll@qt.io>2020-05-14 07:50:25 +0200
commit4ff09cdd47a1f21321a56017743401a7c6b91ad3 (patch)
tree7cb12a980c6b7488113abdd714dd7bd1d7655571 /src/corelib/text/qstringconverter.h
parent4d67b9dcfbb379d9d65a5a1fec74600273941637 (diff)
Optimize appending to an existing string
Optimize the common pattern of "str += decode(data);" and "bytearray += encode(string);" Change-Id: I1da621fa1ad400f23c9718ecf8ae64c00d9d459c Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/text/qstringconverter.h')
-rw-r--r--src/corelib/text/qstringconverter.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/corelib/text/qstringconverter.h b/src/corelib/text/qstringconverter.h
index 7443173df6..989773e113 100644
--- a/src/corelib/text/qstringconverter.h
+++ b/src/corelib/text/qstringconverter.h
@@ -327,6 +327,28 @@ struct QConcatenable<QStringEncoder::DecodedData<T>>
out = s.decoder->decodeIntoBuffer(out, s.data.data(), s.data.length());
}
};
+
+template <typename T>
+QString &operator+=(QString &a, const QStringDecoder::EncodedData<T> &b)
+{
+ qsizetype len = a.size() + QConcatenable<QStringDecoder::EncodedData<T>>::size(b);
+ a.reserve(len);
+ QChar *it = a.data() + a.size();
+ QConcatenable<QStringDecoder::EncodedData<T>>::appendTo(b, it);
+ a.resize(qsizetype(it - a.constData())); //may be smaller than len
+ return a;
+}
+
+template <typename T>
+QByteArray &operator+=(QByteArray &a, const QStringEncoder::DecodedData<T> &b)
+{
+ qsizetype len = a.size() + QConcatenable<QStringEncoder::DecodedData<T>>::size(b);
+ a.reserve(len);
+ char *it = a.data() + a.size();
+ QConcatenable<QStringEncoder::DecodedData<T>>::appendTo(b, it);
+ a.resize(qsizetype(it - a.constData())); //may be smaller than len
+ return a;
+}
#endif
QT_END_NAMESPACE