QString: optimize compare_helper
For a long time now we have fast mixed UTF-16/UTF-8 comparisons. But no-one told this ol' relic, which still converted UTF-8 to UTF-16 for comparison. Fix by using QtPrivate::compareStrings(QSV, QU8SV), which, as the central entry point, uses the fast-path. Consequently, compare_helper can now be noexcept. Pick-to: 6.3 6.2 Change-Id: I4cc9f07d9bc48628f1fe695e80015a9a07b79d6f Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
88fd9a281a
commit
cd3569d69a
@ -6267,7 +6267,7 @@ int QString::compare(QLatin1String other, Qt::CaseSensitivity cs) const noexcept
|
||||
\since 5.0
|
||||
*/
|
||||
int QString::compare_helper(const QChar *data1, qsizetype length1, const char *data2, qsizetype length2,
|
||||
Qt::CaseSensitivity cs)
|
||||
Qt::CaseSensitivity cs) noexcept
|
||||
{
|
||||
Q_ASSERT(length1 >= 0);
|
||||
Q_ASSERT(data1 || length1 == 0);
|
||||
@ -6275,11 +6275,8 @@ int QString::compare_helper(const QChar *data1, qsizetype length1, const char *d
|
||||
return length1;
|
||||
if (Q_UNLIKELY(length2 < 0))
|
||||
length2 = qsizetype(strlen(data2));
|
||||
// ### make me nothrow in all cases
|
||||
QVarLengthArray<ushort> s2(length2);
|
||||
const auto beg = reinterpret_cast<QChar *>(s2.data());
|
||||
const auto end = QUtf8::convertToUnicode(beg, QByteArrayView(data2, length2));
|
||||
return QtPrivate::compareStrings(QStringView(data1, length1), QStringView(beg, end - beg), cs);
|
||||
return QtPrivate::compareStrings(QStringView(data1, length1),
|
||||
QUtf8StringView(data2, length2), cs);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -1106,7 +1106,7 @@ private:
|
||||
Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
|
||||
static int compare_helper(const QChar *data1, qsizetype length1,
|
||||
const char *data2, qsizetype length2,
|
||||
Qt::CaseSensitivity cs = Qt::CaseSensitive);
|
||||
Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
|
||||
static int localeAwareCompare_helper(const QChar *data1, qsizetype length1,
|
||||
const QChar *data2, qsizetype length2);
|
||||
static QString toLower_helper(const QString &str);
|
||||
|
Loading…
x
Reference in New Issue
Block a user