diff options
author | Marc Mutz <marc.mutz@qt.io> | 2023-10-19 15:27:19 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2023-10-19 22:52:22 +0200 |
commit | 4cc31901ea36dcb37efbaa316dde653ad49a5dbb (patch) | |
tree | 33463904fac127149753b1748aa3b0d4d1fd9f7e /src/corelib/serialization | |
parent | fd09519bbd4e7ea89b898c7496e7e06980ee9672 (diff) |
QCborStreamWriter: use (new) QUtf8::convertFromLatin1() to speed up append(QL1SV)
Use the new function to convert into a QVLA instead of first
converting to a QString and then to a QByteArray. One conversion and
one buffer instead of two each.
Pick-to: 6.6
Change-Id: Ieaa24c8ef325797b5a89e8da0ca4310667c00fa7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/serialization')
-rw-r--r-- | src/corelib/serialization/qcborstreamwriter.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/corelib/serialization/qcborstreamwriter.cpp b/src/corelib/serialization/qcborstreamwriter.cpp index 08273763aa..2f0de49654 100644 --- a/src/corelib/serialization/qcborstreamwriter.cpp +++ b/src/corelib/serialization/qcborstreamwriter.cpp @@ -7,9 +7,11 @@ #include <private/qcborcommon_p.h> #include <private/qnumeric_p.h> +#include <private/qstringconverter_p.h> #include <qbuffer.h> #include <qdebug.h> #include <qstack.h> +#include <qvarlengtharray.h> QT_BEGIN_NAMESPACE @@ -439,8 +441,10 @@ void QCborStreamWriter::append(QLatin1StringView str) // it is plain US-ASCII appendTextString(str.latin1(), str.size()); } else { - // non-ASCII, so we need a pass-through UTF-16 - append(QString(str)); + // non-ASCII, convert: + QVarLengthArray<char> utf8(str.size() * 2); // each L1 char gives at most two U8 units + const qsizetype written = QUtf8::convertFromLatin1(utf8.data(), str) - utf8.data(); + appendTextString(utf8.data(), written); } } |