QStringList: add contains(QLatin1String) overload
... to avoid the expensive conversion from QString to QL1S. [ChangeLog][QtCore][QStringList] Added contains(QLatin1String) overload. Change-Id: Ie75839ce9e46e03fe5155a02c7dcf00277b95c8d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
8066ae4943
commit
1dc4c3817b
@ -299,6 +299,16 @@ QStringList QtPrivate::QStringList_filter(const QStringList *that, const QString
|
||||
return res;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static bool stringList_contains(const QStringList &stringList, const T &str, Qt::CaseSensitivity cs)
|
||||
{
|
||||
for (const auto &string : stringList) {
|
||||
if (string.size() == str.size() && string.compare(str, cs) == 0)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\fn bool QStringList::contains(const QString &str, Qt::CaseSensitivity cs) const
|
||||
@ -312,12 +322,24 @@ QStringList QtPrivate::QStringList_filter(const QStringList *that, const QString
|
||||
bool QtPrivate::QStringList_contains(const QStringList *that, const QString &str,
|
||||
Qt::CaseSensitivity cs)
|
||||
{
|
||||
for (int i = 0; i < that->size(); ++i) {
|
||||
const QString & string = that->at(i);
|
||||
if (string.length() == str.length() && str.compare(string, cs) == 0)
|
||||
return true;
|
||||
return stringList_contains(*that, str, cs);
|
||||
}
|
||||
return false;
|
||||
|
||||
/*!
|
||||
\fn bool QStringList::contains(QLatin1String str, Qt::CaseSensitivity cs) const
|
||||
\overload
|
||||
\since 5.10
|
||||
|
||||
Returns \c true if the list contains the string \a str; otherwise
|
||||
returns \c false. The search is case insensitive if \a cs is
|
||||
Qt::CaseInsensitive; the search is case sensitive by default.
|
||||
|
||||
\sa indexOf(), lastIndexOf(), QString::contains()
|
||||
*/
|
||||
bool QtPrivate::QStringList_contains(const QStringList *that, QLatin1String str,
|
||||
Qt::CaseSensitivity cs)
|
||||
{
|
||||
return stringList_contains(*that, str, cs);
|
||||
}
|
||||
|
||||
#ifndef QT_NO_REGEXP
|
||||
|
@ -120,6 +120,7 @@ public:
|
||||
#endif
|
||||
|
||||
inline bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
|
||||
inline bool contains(QLatin1String str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
|
||||
|
||||
inline QStringList operator+(const QStringList &other) const
|
||||
{ QStringList n = *this; n += other; return n; }
|
||||
@ -165,6 +166,7 @@ namespace QtPrivate {
|
||||
Qt::CaseSensitivity cs);
|
||||
|
||||
bool Q_CORE_EXPORT QStringList_contains(const QStringList *that, const QString &str, Qt::CaseSensitivity cs);
|
||||
bool Q_CORE_EXPORT QStringList_contains(const QStringList *that, QLatin1String str, Qt::CaseSensitivity cs);
|
||||
void Q_CORE_EXPORT QStringList_replaceInStrings(QStringList *that, const QString &before, const QString &after,
|
||||
Qt::CaseSensitivity cs);
|
||||
|
||||
@ -222,6 +224,11 @@ inline bool QStringList::contains(const QString &str, Qt::CaseSensitivity cs) co
|
||||
return QtPrivate::QStringList_contains(this, str, cs);
|
||||
}
|
||||
|
||||
inline bool QStringList::contains(QLatin1String str, Qt::CaseSensitivity cs) const
|
||||
{
|
||||
return QtPrivate::QStringList_contains(this, str, cs);
|
||||
}
|
||||
|
||||
inline QStringList &QListSpecialMethods<QString>::replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs)
|
||||
{
|
||||
QtPrivate::QStringList_replaceInStrings(self(), before, after, cs);
|
||||
|
@ -264,6 +264,15 @@ void tst_QStringList::contains()
|
||||
QVERIFY(list.contains("ARTHUR", Qt::CaseInsensitive));
|
||||
QVERIFY(list.contains("dent", Qt::CaseInsensitive));
|
||||
QVERIFY(!list.contains("hans", Qt::CaseInsensitive));
|
||||
|
||||
QVERIFY(list.contains(QLatin1String("arthur")));
|
||||
QVERIFY(!list.contains(QLatin1String("ArthuR")));
|
||||
QVERIFY(!list.contains(QLatin1String("Hans")));
|
||||
QVERIFY(list.contains(QLatin1String("arthur"), Qt::CaseInsensitive));
|
||||
QVERIFY(list.contains(QLatin1String("ArthuR"), Qt::CaseInsensitive));
|
||||
QVERIFY(list.contains(QLatin1String("ARTHUR"), Qt::CaseInsensitive));
|
||||
QVERIFY(list.contains(QLatin1String("dent"), Qt::CaseInsensitive));
|
||||
QVERIFY(!list.contains(QLatin1String("hans"), Qt::CaseInsensitive));
|
||||
}
|
||||
|
||||
void tst_QStringList::removeDuplicates_data()
|
||||
|
Loading…
Reference in New Issue
Block a user