summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2015-10-12 13:38:32 +0200
committerMarc Mutz <marc.mutz@kdab.com>2015-10-15 00:45:11 +0000
commit6951f0e4afb03870f069465f8016e76e4ef1ba41 (patch)
tree8ba4b7e8afcd69ca5f3e10a205d793f45f0f017b /src
parent2d2cb6434f1d6e00f421c98b20467ff3f4388319 (diff)
QCompleter::splitPath(): don't get tangled up in strings
- Don't store "\\" as a QString just for passing it to QString:.startsWith() and prepend(). Keep it a QLatin1String. -> one allocation less - Don't use said QString as a flag, use a bool - Don't store QDir::separator() in a QString -> one allocation less -> two indexing operations less - Don't retrieve QDir::separator() from said QString as QString(sep[0]) -> one more allocation less - Don't look for a QChar in a string by using QRegExp; use the QChar overload instead -> one more allocation (at _least_) less - Don't convert QDir::separator() with QDir::fromNativeSeparators(); it will _always_ be '/'... -> one expensive function call less -> two QString allocations less -> one QString(QChar) introduced -> one allocation more -> could be removed with QStringLiteral/QString::fromLatin1Char() Change-Id: I802e66685a95b08cfc557defc63e5f16a7e6306b Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src')
-rw-r--r--src/widgets/util/qcompleter.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp
index 559f024e5f..ba56f004b7 100644
--- a/src/widgets/util/qcompleter.cpp
+++ b/src/widgets/util/qcompleter.cpp
@@ -1820,26 +1820,23 @@ QStringList QCompleter::splitPath(const QString& path) const
return QStringList(completionPrefix());
QString pathCopy = QDir::toNativeSeparators(path);
- QString sep = QDir::separator();
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
if (pathCopy == QLatin1String("\\") || pathCopy == QLatin1String("\\\\"))
return QStringList(pathCopy);
- QString doubleSlash(QLatin1String("\\\\"));
- if (pathCopy.startsWith(doubleSlash))
+ const bool startsWithDoubleSlash = pathCopy.startsWith(QLatin1String("\\\\"));
+ if (startsWithDoubleSlash)
pathCopy = pathCopy.mid(2);
- else
- doubleSlash.clear();
#endif
- QRegExp re(QLatin1Char('[') + QRegExp::escape(sep) + QLatin1Char(']'));
- QStringList parts = pathCopy.split(re);
+ const QChar sep = QDir::separator();
+ QStringList parts = pathCopy.split(sep);
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
- if (!doubleSlash.isEmpty())
- parts[0].prepend(doubleSlash);
+ if (startsWithDoubleSlash)
+ parts[0].prepend(QLatin1String("\\\\"));
#else
- if (pathCopy[0] == sep[0]) // readd the "/" at the beginning as the split removed it
- parts[0] = QDir::fromNativeSeparators(QString(sep[0]));
+ if (pathCopy[0] == sep) // readd the "/" at the beginning as the split removed it
+ parts[0] = QLatin1Char('/');
#endif
return parts;