1134723edSLouis Dionne //===----------------------------------------------------------------------===// 2134723edSLouis Dionne // 3134723edSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4134723edSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5134723edSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6134723edSLouis Dionne // 7134723edSLouis Dionne //===----------------------------------------------------------------------===// 8134723edSLouis Dionne 9134723edSLouis Dionne #ifndef _LIBCPP___ALGORITHM_REMOVE_IF_H 10134723edSLouis Dionne #define _LIBCPP___ALGORITHM_REMOVE_IF_H 11134723edSLouis Dionne 12134723edSLouis Dionne #include <__algorithm/find_if.h> 134d81a46fSArthur O'Dwyer #include <__config> 14ea2206d7SArthur O'Dwyer #include <__utility/move.h> 15134723edSLouis Dionne 16134723edSLouis Dionne #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 17134723edSLouis Dionne # pragma GCC system_header 18134723edSLouis Dionne #endif 19134723edSLouis Dionne 207b462251SLouis Dionne _LIBCPP_PUSH_MACROS 217b462251SLouis Dionne #include <__undef_macros> 227b462251SLouis Dionne 23134723edSLouis Dionne _LIBCPP_BEGIN_NAMESPACE_STD 24134723edSLouis Dionne 25134723edSLouis Dionne template <class _ForwardIterator, class _Predicate> 26*17e0686aSNikolas Klauser [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator 279783f28cSLouis Dionne remove_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { 2877a00c0dSLouis Dionne __first = std::find_if<_ForwardIterator, _Predicate&>(__first, __last, __pred); 299783f28cSLouis Dionne if (__first != __last) { 30134723edSLouis Dionne _ForwardIterator __i = __first; 319783f28cSLouis Dionne while (++__i != __last) { 329783f28cSLouis Dionne if (!__pred(*__i)) { 3377a00c0dSLouis Dionne *__first = std::move(*__i); 34134723edSLouis Dionne ++__first; 35134723edSLouis Dionne } 36134723edSLouis Dionne } 37134723edSLouis Dionne } 38134723edSLouis Dionne return __first; 39134723edSLouis Dionne } 40134723edSLouis Dionne 41134723edSLouis Dionne _LIBCPP_END_NAMESPACE_STD 42134723edSLouis Dionne 437b462251SLouis Dionne _LIBCPP_POP_MACROS 447b462251SLouis Dionne 45134723edSLouis Dionne #endif // _LIBCPP___ALGORITHM_REMOVE_IF_H 46