xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/include/experimental/bits/erase_if.h (revision a2dc1f3faca890bc62c61c70cbcb4657d1fe6044)
136ac495dSmrg // <experimental/bits/erase_if.h> -*- C++ -*-
236ac495dSmrg 
3*a2dc1f3fSmrg // Copyright (C) 2015-2018 Free Software Foundation, Inc.
436ac495dSmrg //
536ac495dSmrg // This file is part of the GNU ISO C++ Library.  This library is free
636ac495dSmrg // software; you can redistribute it and/or modify it under the
736ac495dSmrg // terms of the GNU General Public License as published by the
836ac495dSmrg // Free Software Foundation; either version 3, or (at your option)
936ac495dSmrg // any later version.
1036ac495dSmrg 
1136ac495dSmrg // This library is distributed in the hope that it will be useful,
1236ac495dSmrg // but WITHOUT ANY WARRANTY; without even the implied warranty of
1336ac495dSmrg // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1436ac495dSmrg // GNU General Public License for more details.
1536ac495dSmrg 
1636ac495dSmrg // Under Section 7 of GPL version 3, you are granted additional
1736ac495dSmrg // permissions described in the GCC Runtime Library Exception, version
1836ac495dSmrg // 3.1, as published by the Free Software Foundation.
1936ac495dSmrg 
2036ac495dSmrg // You should have received a copy of the GNU General Public License and
2136ac495dSmrg // a copy of the GCC Runtime Library Exception along with this program;
2236ac495dSmrg // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
2336ac495dSmrg // <http://www.gnu.org/licenses/>.
2436ac495dSmrg 
2536ac495dSmrg /** @file experimental/bits/erase_if.h
2636ac495dSmrg  *  This is an internal header file, included by other library headers.
2736ac495dSmrg  *  Do not attempt to use it directly.
2836ac495dSmrg  */
2936ac495dSmrg 
3036ac495dSmrg #ifndef _GLIBCXX_EXPERIMENTAL_ERASE_IF_H
3136ac495dSmrg #define _GLIBCXX_EXPERIMENTAL_ERASE_IF_H 1
3236ac495dSmrg 
3336ac495dSmrg #pragma GCC system_header
3436ac495dSmrg 
3536ac495dSmrg #if __cplusplus >= 201402L
3636ac495dSmrg #include <experimental/bits/lfts_config.h>
3736ac495dSmrg 
3836ac495dSmrg namespace std
3936ac495dSmrg {
40*a2dc1f3fSmrg _GLIBCXX_BEGIN_NAMESPACE_VERSION
41*a2dc1f3fSmrg 
4236ac495dSmrg namespace experimental
4336ac495dSmrg {
4436ac495dSmrg inline namespace fundamentals_v2
4536ac495dSmrg {
4636ac495dSmrg   namespace __detail
4736ac495dSmrg   {
4836ac495dSmrg     template<typename _Container, typename _Predicate>
4936ac495dSmrg       void
__erase_nodes_if(_Container & __cont,_Predicate __pred)5036ac495dSmrg       __erase_nodes_if(_Container& __cont, _Predicate __pred)
5136ac495dSmrg       {
5236ac495dSmrg 	for (auto __iter = __cont.begin(), __last = __cont.end();
5336ac495dSmrg 	     __iter != __last;)
5436ac495dSmrg 	{
5536ac495dSmrg 	  if (__pred(*__iter))
5636ac495dSmrg 	    __iter = __cont.erase(__iter);
5736ac495dSmrg 	  else
5836ac495dSmrg 	    ++__iter;
5936ac495dSmrg 	}
6036ac495dSmrg       }
6136ac495dSmrg   } // namespace __detail
6236ac495dSmrg } // inline namespace fundamentals_v2
6336ac495dSmrg } // namespace experimental
64*a2dc1f3fSmrg 
65*a2dc1f3fSmrg _GLIBCXX_END_NAMESPACE_VERSION
6636ac495dSmrg } // namespace std
6736ac495dSmrg 
6836ac495dSmrg #endif // C++14
6936ac495dSmrg 
7036ac495dSmrg #endif // _GLIBCXX_EXPERIMENTAL_ERASE_IF_H
71