diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2015-05-17 16:44:07 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2015-06-19 16:29:41 +0000 |
commit | eb5654788b8c1662a4210e6c76c98abd509cf64f (patch) | |
tree | dac5ee0cbb8c0c40acacbf824a44e70db3f63d4a /src/corelib | |
parent | e2d83802a036c68ff9d7dc96a074f3b11a023249 (diff) |
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 <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/io/qsettings.cpp | 8 | ||||
-rw-r--r-- | src/corelib/io/qsettings_mac.cpp | 2 | ||||
-rw-r--r-- | src/corelib/io/qsettings_p.h | 2 |
3 files changed, 6 insertions, 6 deletions
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<QString, QString> &result) +void QSettingsPrivate::processChild(QStringRef key, ChildSpec spec, QMap<QString, QString> &result) { if (spec != AllKeys) { int slashPos = key.indexOf(QLatin1Char('/')); @@ -312,7 +312,7 @@ void QSettingsPrivate::processChild(QString key, ChildSpec spec, QMap<QString, Q key.truncate(slashPos); } } - result.insert(key, QString()); + result.insert(key.toString(), QString()); } void QSettingsPrivate::beginGroupOrArray(const QSettingsGroup &group) @@ -1292,14 +1292,14 @@ QStringList QConfFileSettingsPrivate::children(const QString &prefix, ChildSpec &confFile->originalKeys)->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<const ParsedSettingsMap *>( &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<CFStringRef>(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<QString, QString> &result); + static void processChild(QStringRef key, ChildSpec spec, QMap<QString, QString> &result); // Variant streaming functions static QStringList variantListToStringList(const QVariantList &l); |