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>
This commit is contained in:
parent
e9fd074cec
commit
58d2927861
@ -775,8 +775,8 @@ QXmlStreamPrivateTagStack::QXmlStreamPrivateTagStack()
|
|||||||
tagStackStringStorage.reserve(32);
|
tagStackStringStorage.reserve(32);
|
||||||
tagStackStringStorageSize = 0;
|
tagStackStringStorageSize = 0;
|
||||||
NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
|
NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
|
||||||
namespaceDeclaration.prefix = addToStringStorage(QLatin1String("xml"));
|
namespaceDeclaration.prefix = addToStringStorage(QStringViewLiteral("xml"));
|
||||||
namespaceDeclaration.namespaceUri = addToStringStorage(QLatin1String("http://www.w3.org/XML/1998/namespace"));
|
namespaceDeclaration.namespaceUri = addToStringStorage(QStringViewLiteral("http://www.w3.org/XML/1998/namespace"));
|
||||||
initialTagStackStringStorageSize = tagStackStringStorageSize;
|
initialTagStackStringStorageSize = tagStackStringStorageSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,20 +205,18 @@ public:
|
|||||||
bool tagsDone;
|
bool tagsDone;
|
||||||
|
|
||||||
inline QStringRef addToStringStorage(const QStringRef &s) {
|
inline QStringRef addToStringStorage(const QStringRef &s) {
|
||||||
int pos = tagStackStringStorageSize;
|
return addToStringStorage(qToStringViewIgnoringNull(s));
|
||||||
int sz = s.size();
|
|
||||||
if (pos != tagStackStringStorage.size())
|
|
||||||
tagStackStringStorage.resize(pos);
|
|
||||||
tagStackStringStorage.insert(pos, s.unicode(), sz);
|
|
||||||
tagStackStringStorageSize += sz;
|
|
||||||
return QStringRef(&tagStackStringStorage, pos, sz);
|
|
||||||
}
|
}
|
||||||
inline QStringRef addToStringStorage(const QString &s) {
|
inline QStringRef addToStringStorage(const QString &s) {
|
||||||
|
return addToStringStorage(qToStringViewIgnoringNull(s));
|
||||||
|
}
|
||||||
|
QStringRef addToStringStorage(QStringView s)
|
||||||
|
{
|
||||||
int pos = tagStackStringStorageSize;
|
int pos = tagStackStringStorageSize;
|
||||||
int sz = s.size();
|
int sz = s.size();
|
||||||
if (pos != tagStackStringStorage.size())
|
if (pos != tagStackStringStorage.size())
|
||||||
tagStackStringStorage.resize(pos);
|
tagStackStringStorage.resize(pos);
|
||||||
tagStackStringStorage.insert(pos, s.unicode(), sz);
|
tagStackStringStorage.append(s.data(), sz);
|
||||||
tagStackStringStorageSize += sz;
|
tagStackStringStorageSize += sz;
|
||||||
return QStringRef(&tagStackStringStorage, pos, sz);
|
return QStringRef(&tagStackStringStorage, pos, sz);
|
||||||
}
|
}
|
||||||
|
@ -701,20 +701,18 @@ public:
|
|||||||
bool tagsDone;
|
bool tagsDone;
|
||||||
|
|
||||||
inline QStringRef addToStringStorage(const QStringRef &s) {
|
inline QStringRef addToStringStorage(const QStringRef &s) {
|
||||||
int pos = tagStackStringStorageSize;
|
return addToStringStorage(qToStringViewIgnoringNull(s));
|
||||||
int sz = s.size();
|
|
||||||
if (pos != tagStackStringStorage.size())
|
|
||||||
tagStackStringStorage.resize(pos);
|
|
||||||
tagStackStringStorage.insert(pos, s.unicode(), sz);
|
|
||||||
tagStackStringStorageSize += sz;
|
|
||||||
return QStringRef(&tagStackStringStorage, pos, sz);
|
|
||||||
}
|
}
|
||||||
inline QStringRef addToStringStorage(const QString &s) {
|
inline QStringRef addToStringStorage(const QString &s) {
|
||||||
|
return addToStringStorage(qToStringViewIgnoringNull(s));
|
||||||
|
}
|
||||||
|
QStringRef addToStringStorage(QStringView s)
|
||||||
|
{
|
||||||
int pos = tagStackStringStorageSize;
|
int pos = tagStackStringStorageSize;
|
||||||
int sz = s.size();
|
int sz = s.size();
|
||||||
if (pos != tagStackStringStorage.size())
|
if (pos != tagStackStringStorage.size())
|
||||||
tagStackStringStorage.resize(pos);
|
tagStackStringStorage.resize(pos);
|
||||||
tagStackStringStorage.insert(pos, s.unicode(), sz);
|
tagStackStringStorage.append(s.data(), sz);
|
||||||
tagStackStringStorageSize += sz;
|
tagStackStringStorageSize += sz;
|
||||||
return QStringRef(&tagStackStringStorage, pos, sz);
|
return QStringRef(&tagStackStringStorage, pos, sz);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user