// -*-c++-*-
// vim: set ft=cpp:

/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file LICENSE.rst or https://cmake.org/licensing for details.  */
#pragma once

#include <algorithm>
#include <vector> // IWYU pragma: export

#include <cm/bits/container_helpers.hxx> // IWYU pragma: export

namespace cm {

// should be updated when C++20 is finalized
#if (__cplusplus > 201703L ||                                                 \
     (defined(_MSVC_LANG) && _MSVC_LANG > 201703)) &&                         \
  defined(__cpp_lib_erase_if)

using std::erase;
using std::erase_if;

#else

template <typename T, typename Allocator, typename V>
inline void erase(std::vector<T, Allocator>& cont, V const& value)
{
  cont.erase(std::remove(cont.begin(), cont.end(), value), cont.end());
}

template <typename T, typename Allocator, typename Predicate>
inline void erase_if(std::vector<T, Allocator>& cont, Predicate pred)
{
  cont.erase(std::remove_if(cont.begin(), cont.end(), pred), cont.end());
}

#endif

} // namespace cm
