From eb5654788b8c1662a4210e6c76c98abd509cf64f Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 17 May 2015 16:44:07 +0200 Subject: Micro-optimize QSettingsPrivate::processChild() and its users ...by using QStringRef instead of QString, avoiding one memory allocation in the case of spec != AllKeys and key containing a '/'. Also calls one less non-inline function, since QStringRef::truncated() is inline. Change-Id: Id5eb203006a3857508c5d3f4b729cde1a5170d58 Reviewed-by: Oswald Buddenhagen Reviewed-by: Olivier Goffart (Woboq GmbH) Reviewed-by: Thiago Macieira --- src/corelib/io/qsettings.cpp | 8 ++++---- src/corelib/io/qsettings_mac.cpp | 2 +- src/corelib/io/qsettings_p.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/corelib/io') diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 977cc107e7..2ae89af356 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -299,7 +299,7 @@ QSettingsPrivate *QSettingsPrivate::create(const QString &fileName, QSettings::F } #endif -void QSettingsPrivate::processChild(QString key, ChildSpec spec, QMap &result) +void QSettingsPrivate::processChild(QStringRef key, ChildSpec spec, QMap &result) { if (spec != AllKeys) { int slashPos = key.indexOf(QLatin1Char('/')); @@ -312,7 +312,7 @@ void QSettingsPrivate::processChild(QString key, ChildSpec spec, QMaporiginalKeys)->lowerBound( thePrefix); while (j != confFile->originalKeys.constEnd() && j.key().startsWith(thePrefix)) { if (!confFile->removedKeys.contains(j.key())) - processChild(j.key().originalCaseKey().mid(startPos), spec, result); + processChild(j.key().originalCaseKey().midRef(startPos), spec, result); ++j; } j = const_cast( &confFile->addedKeys)->lowerBound(thePrefix); while (j != confFile->addedKeys.constEnd() && j.key().startsWith(thePrefix)) { - processChild(j.key().originalCaseKey().mid(startPos), spec, result); + processChild(j.key().originalCaseKey().midRef(startPos), spec, result); ++j; } diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp index 51321c49e7..083722869f 100644 --- a/src/corelib/io/qsettings_mac.cpp +++ b/src/corelib/io/qsettings_mac.cpp @@ -505,7 +505,7 @@ QStringList QMacSettingsPrivate::children(const QString &prefix, ChildSpec spec) QString currentKey = qtKey(static_cast(CFArrayGetValueAtIndex(cfarray, k))); if (currentKey.startsWith(prefix)) - processChild(currentKey.mid(startPos), spec, result); + processChild(currentKey.midRef(startPos), spec, result); } } } diff --git a/src/corelib/io/qsettings_p.h b/src/corelib/io/qsettings_p.h index 93d63fd411..004751182c 100644 --- a/src/corelib/io/qsettings_p.h +++ b/src/corelib/io/qsettings_p.h @@ -211,7 +211,7 @@ public: const QString &organization, const QString &application); static QSettingsPrivate *create(const QString &fileName, QSettings::Format format); - static void processChild(QString key, ChildSpec spec, QMap &result); + static void processChild(QStringRef key, ChildSpec spec, QMap &result); // Variant streaming functions static QStringList variantListToStringList(const QVariantList &l); -- cgit v1.2.3