// -*-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 <unordered_map> // IWYU pragma: export

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

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_if;

#else

template <typename Key, typename T, typename Hash, typename KeyEqual,
          typename Allocator, typename Predicate>
inline void erase_if(
  std::unordered_map<Key, T, Hash, KeyEqual, Allocator>& cont, Predicate pred)
{
  internals::erase_if(cont, pred);
}

template <typename Key, typename T, typename Hash, typename KeyEqual,
          typename Allocator, typename Predicate>
inline void erase_if(
  std::unordered_multimap<Key, T, Hash, KeyEqual, Allocator>& cont,
  Predicate pred)
{
  internals::erase_if(cont, pred);
}

#endif

} // namespace cm
