diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-05-05 15:45:47 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-05-14 07:50:25 +0200 |
commit | 4ff09cdd47a1f21321a56017743401a7c6b91ad3 (patch) | |
tree | 7cb12a980c6b7488113abdd714dd7bd1d7655571 /src/corelib/text/qstringconverter.h | |
parent | 4d67b9dcfbb379d9d65a5a1fec74600273941637 (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.h | 22 |
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 |