erase_if.hxx 569 B

1234567891011121314151617181920212223242526
  1. // -*-c++-*-
  2. // vim: set ft=cpp:
  3. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  4. file LICENSE.rst or https://cmake.org/licensing for details. */
  5. #pragma once
  6. namespace cm {
  7. namespace internals {
  8. template <typename Container, typename Predicate>
  9. void erase_if(Container& cont, Predicate pred)
  10. {
  11. for (typename Container::iterator iter = cont.begin(), last = cont.end();
  12. iter != last;) {
  13. if (pred(*iter)) {
  14. iter = cont.erase(iter);
  15. } else {
  16. ++iter;
  17. }
  18. }
  19. }
  20. } // namespace internals
  21. } // namespace cm