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>
bb10
parent
2d2cb6434f
commit
6951f0e4af
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue