// -*-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.  */
#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, const V& 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
