2 //===----------------------------------------------------------------------===//
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //===----------------------------------------------------------------------===//
10 #ifndef _LIBCPP___ITERATOR_ERASE_IF_CONTAINER_H
11 #define _LIBCPP___ITERATOR_ERASE_IF_CONTAINER_H
15 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
16 # pragma GCC system_header
20 #include <__undef_macros>
22 _LIBCPP_BEGIN_NAMESPACE_STD
24 template <class _Container
, class _Predicate
>
26 typename
_Container::size_type
27 __libcpp_erase_if_container(_Container
& __c
, _Predicate
& __pred
) {
28 typename
_Container::size_type __old_size
= __c
.size();
30 const typename
_Container::iterator __last
= __c
.end();
31 for (typename
_Container::iterator __iter
= __c
.begin(); __iter
!= __last
;) {
33 __iter
= __c
.erase(__iter
);
38 return __old_size
- __c
.size();
41 _LIBCPP_END_NAMESPACE_STD
45 #endif // _LIBCPP___ITERATOR_ERASE_IF_CONTAINER_H