summaryrefslogtreecommitdiff
path: root/Utilities/std/cm/bits/erase_if.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'Utilities/std/cm/bits/erase_if.hxx')
-rw-r--r--Utilities/std/cm/bits/erase_if.hxx29
1 files changed, 29 insertions, 0 deletions
diff --git a/Utilities/std/cm/bits/erase_if.hxx b/Utilities/std/cm/bits/erase_if.hxx
new file mode 100644
index 0000000000..8952fb589f
--- /dev/null
+++ b/Utilities/std/cm/bits/erase_if.hxx
@@ -0,0 +1,29 @@
+// -*-c++-*-
+// vim: set ft=cpp:
+
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+
+#ifndef cm_bits_erase_if_hxx
+#define cm_bits_erase_if_hxx
+
+namespace cm {
+namespace internals {
+
+template <typename Container, typename Predicate>
+void erase_if(Container& cont, Predicate pred)
+{
+ for (typename Container::iterator iter = cont.begin(), last = cont.end();
+ iter != last;) {
+ if (pred(*iter)) {
+ iter = cont.erase(iter);
+ } else {
+ ++iter;
+ }
+ }
+}
+
+} // namespace internals
+} // namespace cm
+
+#endif