summaryrefslogtreecommitdiffstats
path: root/Utilities/std/cm/bits
diff options
context:
space:
mode:
authorMarc Chevrier <marc.chevrier@gmail.com>2020-01-02 16:51:35 (GMT)
committerMarc Chevrier <marc.chevrier@gmail.com>2020-01-08 16:35:16 (GMT)
commit348b60d19deec458e2300949900f682002aecf44 (patch)
tree59e303998d5c3a81dac20daf5c395df16b51058e /Utilities/std/cm/bits
parentd020ed99e9ee7449be5816ad52eff4456ae782bf (diff)
downloadCMake-348b60d19deec458e2300949900f682002aecf44.zip
CMake-348b60d19deec458e2300949900f682002aecf44.tar.gz
CMake-348b60d19deec458e2300949900f682002aecf44.tar.bz2
STL support: add c++20 std::erase and std::erase_if functions
Diffstat (limited to 'Utilities/std/cm/bits')
-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 0000000..8952fb5
--- /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