From 105a66e6543467863a39cd12271f125b45d74179 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 18 May 2017 14:49:04 +0200 Subject: Use (new) erase()/erase_if() algorithms Change-Id: I45c18fd45c20b226e44d16315e3ebb6c305d4ab0 Reviewed-by: Thiago Macieira --- qmake/CMakeLists.txt | 1 + qmake/generators/makefile.cpp | 4 +--- qmake/library/proitems.cpp | 19 ++++--------------- qmake/qmake.pro | 1 + src/corelib/io/qurlquery.cpp | 3 +-- src/corelib/itemmodels/qitemselectionmodel.cpp | 9 ++------- src/corelib/mimetypes/qmimeglobpattern_p.h | 2 +- src/corelib/text/qstringlist.cpp | 17 ++--------------- src/corelib/tools/qcommandlineoption.cpp | 3 +-- src/dbus/qdbusintegrator.cpp | 7 ++----- src/gui/image/qmovie.cpp | 2 +- src/gui/text/qsyntaxhighlighter.cpp | 6 +----- src/gui/text/qtextdocumentlayout.cpp | 6 +----- src/network/access/qhttpnetworkheader.cpp | 4 +--- src/network/access/qnetworkrequest.cpp | 4 +--- src/opengl/qopenglengineshadermanager.cpp | 4 +--- src/widgets/itemviews/qabstractitemview.cpp | 7 ++----- src/widgets/itemviews/qlistview.cpp | 7 ++----- src/widgets/styles/qwindowsstyle.cpp | 2 +- src/widgets/widgets/qabstractbutton.cpp | 4 +--- 20 files changed, 28 insertions(+), 84 deletions(-) diff --git a/qmake/CMakeLists.txt b/qmake/CMakeLists.txt index 133472b78d..3897ea192c 100644 --- a/qmake/CMakeLists.txt +++ b/qmake/CMakeLists.txt @@ -113,6 +113,7 @@ qt_internal_add_tool(${target_name} ../src/corelib/time/qgregoriancalendar.cpp ../src/corelib/time/qgregoriancalendar_p.h # special case ../src/corelib/time/qromancalendar.cpp ../src/corelib/time/qromancalendar_p.h # special case ../src/corelib/time/qdatetime.cpp ../src/corelib/time/qdatetime.h ../src/corelib/time/qdatetime_p.h # special case + ../src/corelib/tools/qduplicatetracker_p.h ../src/corelib/tools/qhash.cpp ../src/corelib/tools/qhash.h ../src/corelib/tools/qlist.h ../src/corelib/tools/qmap.h diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index da6d42c88e..1f60f29215 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -940,9 +940,7 @@ MakefileGenerator::filterIncludedFiles(const char *var) auto isIncluded = [this](const ProString &input) { return QMakeSourceFileInfo::included(input.toQString()) > 0; }; - inputs.erase(std::remove_if(inputs.begin(), inputs.end(), - isIncluded), - inputs.end()); + inputs.removeIf(isIncluded); } static QString diff --git a/qmake/library/proitems.cpp b/qmake/library/proitems.cpp index e1cfbad8a1..ba817596c5 100644 --- a/qmake/library/proitems.cpp +++ b/qmake/library/proitems.cpp @@ -32,6 +32,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -403,21 +404,9 @@ void ProStringList::removeEmpty() void ProStringList::removeDuplicates() { - int n = size(); - int j = 0; - QSet seen; - seen.reserve(n); - for (int i = 0; i < n; ++i) { - const ProString &s = at(i); - if (seen.contains(s)) - continue; - seen.insert(s); - if (j != i) - (*this)[j] = s; - ++j; - } - if (n != j) - erase(begin() + j, end()); + QDuplicateTracker seen; + seen.reserve(size()); + removeIf([&](const ProString &s) { return seen.hasSeen(s); }); } void ProStringList::insertUnique(const ProStringList &value) diff --git a/qmake/qmake.pro b/qmake/qmake.pro index 4ff467f5ca..7474d5d54d 100644 --- a/qmake/qmake.pro +++ b/qmake/qmake.pro @@ -187,6 +187,7 @@ HEADERS += \ qcryptographichash.h \ qdatetime.h \ qdatetime_p.h \ + qduplicatetracker_p.h \ qdir.h \ qdir_p.h \ qdiriterator.h \ diff --git a/src/corelib/io/qurlquery.cpp b/src/corelib/io/qurlquery.cpp index a836fb2e99..c469c51ea9 100644 --- a/src/corelib/io/qurlquery.cpp +++ b/src/corelib/io/qurlquery.cpp @@ -764,8 +764,7 @@ void QUrlQuery::removeAllQueryItems(const QString &key) auto firstEqualsEncodedKey = [&encodedKey](const QPair &item) { return item.first == encodedKey; }; - const auto end = p->itemList.end(); - p->itemList.erase(std::remove_if(p->itemList.begin(), end, firstEqualsEncodedKey), end); + p->itemList.removeIf(firstEqualsEncodedKey); } } diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp index b6a6bff118..b12cfc471b 100644 --- a/src/corelib/itemmodels/qitemselectionmodel.cpp +++ b/src/corelib/itemmodels/qitemselectionmodel.cpp @@ -1252,9 +1252,7 @@ void QItemSelectionModel::select(const QItemSelection &selection, QItemSelection // be too late if another model observer is connected to the same modelReset slot and is invoked first // it might call select() on this selection model before any such QItemSelectionModelPrivate::_q_modelReset() slot // is invoked, so it would not be cleared yet. We clear it invalid ranges in it here. - using namespace QtFunctionObjects; - d->ranges.erase(std::remove_if(d->ranges.begin(), d->ranges.end(), IsNotValid()), - d->ranges.end()); + d->ranges.removeIf(QtFunctionObjects::IsNotValid()); QItemSelection old = d->ranges; old.merge(d->currentSelection, d->currentCommand); @@ -1755,10 +1753,7 @@ const QItemSelection QItemSelectionModel::selection() const selected.merge(d->currentSelection, d->currentCommand); // make sure we have no invalid ranges // ### should probably be handled more generic somewhere else - using namespace QtFunctionObjects; - selected.erase(std::remove_if(selected.begin(), selected.end(), - IsNotValid()), - selected.end()); + selected.removeIf(QtFunctionObjects::IsNotValid()); return selected; } diff --git a/src/corelib/mimetypes/qmimeglobpattern_p.h b/src/corelib/mimetypes/qmimeglobpattern_p.h index 49f145e8db..88284521d1 100644 --- a/src/corelib/mimetypes/qmimeglobpattern_p.h +++ b/src/corelib/mimetypes/qmimeglobpattern_p.h @@ -128,7 +128,7 @@ public: auto isMimeTypeEqual = [&mimeType](const QMimeGlobPattern &pattern) { return pattern.mimeType() == mimeType; }; - erase(std::remove_if(begin(), end(), isMimeTypeEqual), end()); + removeIf(isMimeTypeEqual); } void match(QMimeGlobMatchResult &result, const QString &fileName) const; diff --git a/src/corelib/text/qstringlist.cpp b/src/corelib/text/qstringlist.cpp index c395750376..440e26bc89 100644 --- a/src/corelib/text/qstringlist.cpp +++ b/src/corelib/text/qstringlist.cpp @@ -648,22 +648,9 @@ qsizetype QtPrivate::QStringList_lastIndexOf(const QStringList *that, const QReg */ qsizetype QtPrivate::QStringList_removeDuplicates(QStringList *that) { - qsizetype n = that->size(); - qsizetype j = 0; - QDuplicateTracker seen; - seen.reserve(n); - for (qsizetype i = 0; i < n; ++i) { - const QString &s = that->at(i); - if (seen.hasSeen(s)) - continue; - if (j != i) - that->swapItemsAt(i, j); - ++j; - } - if (n != j) - that->erase(that->begin() + j, that->end()); - return n - j; + seen.reserve(that->size()); + return that->removeIf([&](const QString &s) { return seen.hasSeen(s); }); } QT_END_NAMESPACE diff --git a/src/corelib/tools/qcommandlineoption.cpp b/src/corelib/tools/qcommandlineoption.cpp index 60ae7ed0da..bfb6f68f08 100644 --- a/src/corelib/tools/qcommandlineoption.cpp +++ b/src/corelib/tools/qcommandlineoption.cpp @@ -286,8 +286,7 @@ QStringList QCommandLineOptionPrivate::removeInvalidNames(QStringList nameList) if (Q_UNLIKELY(nameList.isEmpty())) qWarning("QCommandLineOption: Options must have at least one name"); else - nameList.erase(std::remove_if(nameList.begin(), nameList.end(), IsInvalidName()), - nameList.end()); + nameList.removeIf(IsInvalidName()); return nameList; } diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index 114931f3de..6bf9ad7786 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -593,11 +593,8 @@ static void huntAndDestroy(QObject *needle, QDBusConnectionPrivate::ObjectTreeNo for (auto &node : haystack.children) huntAndDestroy(needle, node); - auto isInactive = [](QDBusConnectionPrivate::ObjectTreeNode &node) { return !node.isActive(); }; - - haystack.children.erase(std::remove_if(haystack.children.begin(), haystack.children.end(), - isInactive), - haystack.children.end()); + auto isInactive = [](const QDBusConnectionPrivate::ObjectTreeNode &node) { return !node.isActive(); }; + haystack.children.removeIf(isInactive); if (needle == haystack.obj) { haystack.obj = nullptr; diff --git a/src/gui/image/qmovie.cpp b/src/gui/image/qmovie.cpp index e99093d582..6c5922df0f 100644 --- a/src/gui/image/qmovie.cpp +++ b/src/gui/image/qmovie.cpp @@ -1022,7 +1022,7 @@ QList QMovie::supportedFormats() return !QImageReader(&buffer, format).supportsOption(QImageIOHandler::Animation); }; - list.erase(std::remove_if(list.begin(), list.end(), doesntSupportAnimation), list.end()); + list.removeIf(doesntSupportAnimation); return list; } diff --git a/src/gui/text/qsyntaxhighlighter.cpp b/src/gui/text/qsyntaxhighlighter.cpp index 5a837b29e3..9e7a7c4d2c 100644 --- a/src/gui/text/qsyntaxhighlighter.cpp +++ b/src/gui/text/qsyntaxhighlighter.cpp @@ -109,12 +109,8 @@ void QSyntaxHighlighterPrivate::applyFormatChanges() return range.start < preeditAreaStart || range.start + range.length > preeditAreaStart + preeditAreaLength; }; - const auto it = std::remove_if(ranges.begin(), ranges.end(), - isOutsidePreeditArea); - if (it != ranges.end()) { - ranges.erase(it, ranges.end()); + if (ranges.removeIf(isOutsidePreeditArea) > 0) formatsChanged = true; - } } else if (!ranges.isEmpty()) { ranges.clear(); formatsChanged = true; diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index 3138168e90..81fe6eb640 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -3756,11 +3756,7 @@ static void markFrames(QTextFrame *current, int from, int oldLength, int length) QTextFrameData *fd = data(current); // float got removed in editing operation - QTextFrame *null = nullptr; // work-around for (at least) MSVC 2012 emitting - // warning C4100 for its own header - // when passing nullptr directly to std::remove - fd->floats.erase(std::remove(fd->floats.begin(), fd->floats.end(), null), - fd->floats.end()); + fd->floats.removeAll(nullptr); fd->layoutDirty = true; fd->sizeDirty = true; diff --git a/src/network/access/qhttpnetworkheader.cpp b/src/network/access/qhttpnetworkheader.cpp index 98d7dcafe2..5901a146dc 100644 --- a/src/network/access/qhttpnetworkheader.cpp +++ b/src/network/access/qhttpnetworkheader.cpp @@ -106,9 +106,7 @@ void QHttpNetworkHeaderPrivate::setHeaderField(const QByteArray &name, const QBy auto firstEqualsName = [&name](const QPair &header) { return name.compare(header.first, Qt::CaseInsensitive) == 0; }; - fields.erase(std::remove_if(fields.begin(), fields.end(), - firstEqualsName), - fields.end()); + fields.removeIf(firstEqualsName); fields.append(qMakePair(name, data)); } diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index a02b1fb912..ee2b9c67c3 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -1324,9 +1324,7 @@ void QNetworkHeadersPrivate::setRawHeaderInternal(const QByteArray &key, const Q auto firstEqualsKey = [&key](const RawHeaderPair &header) { return header.first.compare(key, Qt::CaseInsensitive) == 0; }; - rawHeaders.erase(std::remove_if(rawHeaders.begin(), rawHeaders.end(), - firstEqualsKey), - rawHeaders.end()); + rawHeaders.removeIf(firstEqualsKey); if (value.isNull()) return; // only wanted to erase key diff --git a/src/opengl/qopenglengineshadermanager.cpp b/src/opengl/qopenglengineshadermanager.cpp index dc52b326bb..eb2aa12d07 100644 --- a/src/opengl/qopenglengineshadermanager.cpp +++ b/src/opengl/qopenglengineshadermanager.cpp @@ -493,9 +493,7 @@ void QOpenGLEngineSharedShaders::cleanupCustomStage(QOpenGLCustomShaderStage* st } return false; }; - cachedPrograms.erase(std::remove_if(cachedPrograms.begin(), cachedPrograms.end(), - hasStageAsCustomShaderSouce), - cachedPrograms.end()); + cachedPrograms.removeIf(hasStageAsCustomShaderSouce); } diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 2e0ddf678f..8f8f597d11 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -2642,8 +2642,7 @@ QModelIndexList QAbstractItemView::selectedIndexes() const auto isHidden = [this](const QModelIndex &idx) { return isIndexHidden(idx); }; - const auto end = indexes.end(); - indexes.erase(std::remove_if(indexes.begin(), end, isHidden), end); + indexes.removeIf(isHidden); } return indexes; } @@ -4489,9 +4488,7 @@ QModelIndexList QAbstractItemViewPrivate::selectedDraggableIndexes() const auto isNotDragEnabled = [this](const QModelIndex &index) { return !isIndexDragEnabled(index); }; - indexes.erase(std::remove_if(indexes.begin(), indexes.end(), - isNotDragEnabled), - indexes.end()); + indexes.removeIf(isNotDragEnabled); return indexes; } diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index 5e400e5c8f..269f08ce9f 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -1522,8 +1522,7 @@ QModelIndexList QListView::selectedIndexes() const auto ignorable = [this, d](const QModelIndex &index) { return index.column() != d->column || index.parent() != d->root || isIndexHidden(index); }; - viewSelected.erase(std::remove_if(viewSelected.begin(), viewSelected.end(), ignorable), - viewSelected.end()); + viewSelected.removeIf(ignorable); return viewSelected; } @@ -1960,9 +1959,7 @@ void QListViewPrivate::removeCurrentAndDisabled(QList *indexes, auto isCurrentOrDisabled = [this, current](const QModelIndex &index) { return !isIndexEnabled(index) || index == current; }; - indexes->erase(std::remove_if(indexes->begin(), indexes->end(), - isCurrentOrDisabled), - indexes->end()); + indexes->removeIf(isCurrentOrDisabled); } /* diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp index ec252d9293..78e244307f 100644 --- a/src/widgets/styles/qwindowsstyle.cpp +++ b/src/widgets/styles/qwindowsstyle.cpp @@ -173,7 +173,7 @@ bool QWindowsStyle::eventFilter(QObject *o, QEvent *e) return w->isWindow() || !w->isVisible() || w->style()->styleHint(SH_UnderlineShortcut, nullptr, w); }; - l.erase(std::remove_if(l.begin(), l.end(), ignorable), l.end()); + l.removeIf(ignorable); // Update states before repainting d->seenAlt.append(widget); d->alt_down = true; diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp index 5ced1397b8..727cd66ed4 100644 --- a/src/widgets/widgets/qabstractbutton.cpp +++ b/src/widgets/widgets/qabstractbutton.cpp @@ -199,9 +199,7 @@ QListQAbstractButtonPrivate::queryButtonList() const #endif ; }; - candidates.erase(std::remove_if(candidates.begin(), candidates.end(), - isNoMemberOfMyAutoExclusiveGroup), - candidates.end()); + candidates.removeIf(isNoMemberOfMyAutoExclusiveGroup); } return candidates; } -- cgit v1.2.3