diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2017-04-13 14:59:57 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2017-04-19 12:31:50 +0000 |
commit | 58d2927861d3e57cac4f6db599e209d2bfb17a2c (patch) | |
tree | a43f5edc122048c28fb5840c917848c753b28953 /src/corelib/xml/qxmlstream.g | |
parent | e9fd074cecfa5bb79bbaa5522a31aa28e3db43a8 (diff) |
QXmlStream: optimize PrivateTagStack::addToStringStorage()
De-duplicate the QString/Ref code paths by using QStringView instead.
Keep the old overloads so we can centrally apply the qToStringView-
IgnoringNull() optimization.
Replace insert(p, ..) where p = size() with append(..). The code
ensures in the lines before that the insertion position is the end of
the string.
Port the few QLatin1String arguments to addToStringStorage() to
QStringViewLiteral. I also considered adding a QLatin1String()
overload, but the test size increased, so the function wasn't pulling
its own weight.
This version saves 360B in text size on optimized GCC 6.1 Linux AMD64
builds.
Change-Id: I4b759fddc38b1f97a7218954e756cc19400922e9
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/xml/qxmlstream.g')
-rw-r--r-- | src/corelib/xml/qxmlstream.g | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/corelib/xml/qxmlstream.g b/src/corelib/xml/qxmlstream.g index d4dd7b2622..73085bda8a 100644 --- a/src/corelib/xml/qxmlstream.g +++ b/src/corelib/xml/qxmlstream.g @@ -205,20 +205,18 @@ public: bool tagsDone; inline QStringRef addToStringStorage(const QStringRef &s) { - int pos = tagStackStringStorageSize; - int sz = s.size(); - if (pos != tagStackStringStorage.size()) - tagStackStringStorage.resize(pos); - tagStackStringStorage.insert(pos, s.unicode(), sz); - tagStackStringStorageSize += sz; - return QStringRef(&tagStackStringStorage, pos, sz); + return addToStringStorage(qToStringViewIgnoringNull(s)); } inline QStringRef addToStringStorage(const QString &s) { + return addToStringStorage(qToStringViewIgnoringNull(s)); + } + QStringRef addToStringStorage(QStringView s) + { int pos = tagStackStringStorageSize; int sz = s.size(); if (pos != tagStackStringStorage.size()) tagStackStringStorage.resize(pos); - tagStackStringStorage.insert(pos, s.unicode(), sz); + tagStackStringStorage.append(s.data(), sz); tagStackStringStorageSize += sz; return QStringRef(&tagStackStringStorage, pos, sz); } |