// -*-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 <deque> // 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::deque<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::deque<T, Allocator>& cont, Predicate pred)
{
  cont.erase(std::remove_if(cont.begin(), cont.end(), pred), cont.end());
}

#endif

} // namespace cm
