summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qcontainertools_impl.h
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2020-10-16 19:16:29 +0200
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2020-12-01 18:55:55 +0100
commit62dad9be9e172597c56a970202299563aa04918e (patch)
tree30164786bdc708d2e3e33696ddba4fcfdf082b8b /src/corelib/tools/qcontainertools_impl.h
parentc176525f13bfcea8649d9e987bdff0dc45a56bf7 (diff)
QSet: add erase_if
[ChangeLog][QtCore][QSet] Added erase_if() for consistent container erasure. Added removeIf() as a method. Change-Id: I4af57b654036aa08bee3f769ab2f60be37115094 Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/tools/qcontainertools_impl.h')
-rw-r--r--src/corelib/tools/qcontainertools_impl.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/corelib/tools/qcontainertools_impl.h b/src/corelib/tools/qcontainertools_impl.h
index 79c41fee87..54de6a8815 100644
--- a/src/corelib/tools/qcontainertools_impl.h
+++ b/src/corelib/tools/qcontainertools_impl.h
@@ -198,6 +198,23 @@ auto sequential_erase_if(Container &c, Predicate &pred)
return result;
}
+template <typename T, typename Predicate>
+qsizetype qset_erase_if(QSet<T> &set, Predicate &pred)
+{
+ qsizetype result = 0;
+ auto it = set.begin();
+ const auto e = set.end();
+ while (it != e) {
+ if (pred(*it)) {
+ ++result;
+ it = set.erase(it);
+ } else {
+ ++it;
+ }
+ }
+ return result;
+}
+
} // namespace QtPrivate
QT_END_NAMESPACE