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
>
25 _LIBCPP_HIDE_FROM_ABI typename
_Container::size_type
__libcpp_erase_if_container(_Container
& __c
, _Predicate
& __pred
) {
26 typename
_Container::size_type __old_size
= __c
.size();
28 const typename
_Container::iterator __last
= __c
.end();
29 for (typename
_Container::iterator __iter
= __c
.begin(); __iter
!= __last
;) {
31 __iter
= __c
.erase(__iter
);
36 return __old_size
- __c
.size();
39 _LIBCPP_END_NAMESPACE_STD
43 #endif // _LIBCPP___ITERATOR_ERASE_IF_CONTAINER_H