diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2015-10-12 13:38:32 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2015-10-15 00:45:11 +0000 |
commit | 6951f0e4afb03870f069465f8016e76e4ef1ba41 (patch) | |
tree | 8ba4b7e8afcd69ca5f3e10a205d793f45f0f017b /src/widgets | |
parent | 2d2cb6434f1d6e00f421c98b20467ff3f4388319 (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/widgets')
-rw-r--r-- | src/widgets/util/qcompleter.cpp | 19 |
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; |