10#ifndef _PSTL_GLUE_ALGORITHM_IMPL_H
11#define _PSTL_GLUE_ALGORITHM_IMPL_H
25template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Predicate>
27any_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred)
37template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Pred>
39all_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Pred __pred)
46template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Predicate>
48none_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred)
55template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Function>
57for_each(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Function __f)
64template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Size,
class _Function>
66for_each_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n, _Function __f)
76template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Predicate>
78find_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred)
86template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Predicate>
88find_if_not(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred)
93template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Tp>
95find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
const _Tp& __value)
102template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _BinaryPredicate>
104find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first,
105 _ForwardIterator2 __s_last, _BinaryPredicate __pred)
110 __last, __s_first, __s_last, __pred);
113template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
115find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first,
116 _ForwardIterator2 __s_last)
123template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _BinaryPredicate>
125find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
126 _ForwardIterator2 __s_first, _ForwardIterator2 __s_last, _BinaryPredicate __pred)
131 __last, __s_first, __s_last, __pred);
134template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
136find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
137 _ForwardIterator2 __s_first, _ForwardIterator2 __s_last)
144template <
class _ExecutionPolicy,
class _ForwardIterator>
146adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last)
155template <
class _ExecutionPolicy,
class _ForwardIterator,
class _BinaryPredicate>
157adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred)
161 __last, __pred,
false);
169template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Tp>
171 typename iterator_traits<_ForwardIterator>::difference_type>
172count(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
const _Tp& __value)
178 [&__value](
const _ValueType& __x) {
return __value == __x; });
181template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Predicate>
183 typename iterator_traits<_ForwardIterator>::difference_type>
184count_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred)
193template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _BinaryPredicate>
195search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first,
196 _ForwardIterator2 __s_last, _BinaryPredicate __pred)
201 __s_first, __s_last, __pred);
204template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
206search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first,
207 _ForwardIterator2 __s_last)
212template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Size,
class _Tp,
class _BinaryPredicate>
214search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count,
215 const _Tp& __value, _BinaryPredicate __pred)
220 __last, __count, __value, __pred);
223template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Size,
class _Tp>
225search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count,
234template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
236copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result)
240 using __is_vector =
typename decltype(__dispatch_tag)::__is_vector;
244 [](_ForwardIterator1 __begin, _ForwardIterator1 __end, _ForwardIterator2 __res)
248template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _Size,
class _ForwardIterator2>
250copy_n(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _Size __n, _ForwardIterator2 __result)
254 using __is_vector =
typename decltype(__dispatch_tag)::__is_vector;
258 [](_ForwardIterator1 __begin, _Size __sz, _ForwardIterator2 __res)
262template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _Predicate>
264copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result,
270 __last, __result, __pred);
275template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
277swap_ranges(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
278 _ForwardIterator2 __first2)
287 [](_ReferenceType1 __x, _ReferenceType2 __y)
296template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _UnaryOperation>
298transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result,
299 _UnaryOperation __op)
308 [__op](_InputType __x, _OutputType __y)
mutable { __y = __op(__x); });
311template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator,
312 class _BinaryOperation>
314transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
315 _ForwardIterator __result, _BinaryOperation __op)
325 [__op](_Input1Type __x, _Input2Type __y, _OutputType __z)
mutable { __z = __op(__x, __y); });
330template <
class _ExecutionPolicy,
class _ForwardIterator,
class _UnaryPredicate,
class _Tp>
332replace_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred,
333 const _Tp& __new_value)
340 [&__pred, &__new_value](_ElementType __elem)
344 __elem = __new_value;
349template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Tp>
351replace(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
const _Tp& __old_value,
352 const _Tp& __new_value)
358template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _UnaryPredicate,
class _Tp>
360replace_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
361 _ForwardIterator2 __result, _UnaryPredicate __pred,
const _Tp& __new_value)
370 [__pred, &__new_value](_InputType __x, _OutputType __y)
mutable { __y = __pred(__x) ? __new_value : __x; });
373template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _Tp>
375replace_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result,
376 const _Tp& __old_value,
const _Tp& __new_value)
384template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Tp>
386fill(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
const _Tp& __value)
394template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Size,
class _Tp>
396fill_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __count,
const _Tp& __value)
408template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Generator>
410generate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Generator __g)
418template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Size,
class _Generator>
420generate_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __count, _Generator __g)
433template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _Predicate>
435remove_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
436 _ForwardIterator2 __result, _Predicate __pred)
441template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _Tp>
443remove_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result,
450template <
class _ExecutionPolicy,
class _ForwardIterator,
class _UnaryPredicate>
452remove_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred)
460template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Tp>
462remove(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
const _Tp& __value)
470template <
class _ExecutionPolicy,
class _ForwardIterator,
class _BinaryPredicate>
472unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred)
480template <
class _ExecutionPolicy,
class _ForwardIterator>
482unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last)
487template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _BinaryPredicate>
489unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result,
490 _BinaryPredicate __pred)
495 __last, __result, __pred);
498template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
500unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result)
507template <
class _ExecutionPolicy,
class _B
idirectionalIterator>
509reverse(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last)
516template <
class _ExecutionPolicy,
class _B
idirectionalIterator,
class _ForwardIterator>
518reverse_copy(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last,
519 _ForwardIterator __d_first)
529template <
class _ExecutionPolicy,
class _ForwardIterator>
531rotate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last)
539template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
541rotate_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __middle, _ForwardIterator1 __last,
542 _ForwardIterator2 __result)
547 __middle, __last, __result);
552template <
class _ExecutionPolicy,
class _ForwardIterator,
class _UnaryPredicate>
554is_partitioned(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred)
561template <
class _ExecutionPolicy,
class _ForwardIterator,
class _UnaryPredicate>
563partition(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred)
571template <
class _ExecutionPolicy,
class _B
idirectionalIterator,
class _UnaryPredicate>
573stable_partition(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last,
574 _UnaryPredicate __pred)
578 __first, __last, __pred);
581template <
class _ExecutionPolicy,
class _ForwardIterator,
class _ForwardIterator1,
class _ForwardIterator2,
582 class _UnaryPredicate>
584partition_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
585 _ForwardIterator1 __out_true, _ForwardIterator2 __out_false, _UnaryPredicate __pred)
590 __last, __out_true, __out_false, __pred);
595template <
class _ExecutionPolicy,
class _RandomAccessIterator,
class _Compare>
597sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
606template <
class _ExecutionPolicy,
class _RandomAccessIterator>
608sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last)
616template <
class _ExecutionPolicy,
class _RandomAccessIterator,
class _Compare>
618stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
626template <
class _ExecutionPolicy,
class _RandomAccessIterator>
628stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last)
636template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _BinaryPredicate>
638mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
639 _ForwardIterator2 __last2, _BinaryPredicate __pred)
644 __last1, __first2, __last2, __pred);
647template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _BinaryPredicate>
649mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
650 _BinaryPredicate __pred)
656template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
658mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
659 _ForwardIterator2 __last2)
665template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
667mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2)
676template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _BinaryPredicate>
678equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
679 _BinaryPredicate __p)
684 __last1, __first2, __p);
687template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
689equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2)
694template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _BinaryPredicate>
696equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
697 _ForwardIterator2 __last2, _BinaryPredicate __p)
702 __last1, __first2, __last2, __p);
705template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
707equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
708 _ForwardIterator2 __last2)
714template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
716move(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __d_first)
720 using __is_vector =
typename decltype(__dispatch_tag)::__is_vector;
724 [](_ForwardIterator1 __begin, _ForwardIterator1 __end, _ForwardIterator2 __res)
730template <
class _ExecutionPolicy,
class _RandomAccessIterator,
class _Compare>
732partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle,
733 _RandomAccessIterator __last,
_Compare __comp)
738 __middle, __last, __comp);
741template <
class _ExecutionPolicy,
class _RandomAccessIterator>
743partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle,
744 _RandomAccessIterator __last)
752template <
class _ExecutionPolicy,
class _ForwardIterator,
class _RandomAccessIterator,
class _Compare>
755 _RandomAccessIterator __d_first, _RandomAccessIterator __d_last,
_Compare __comp)
760 __first, __last, __d_first, __d_last, __comp);
763template <
class _ExecutionPolicy,
class _ForwardIterator,
class _RandomAccessIterator>
766 _RandomAccessIterator __d_first, _RandomAccessIterator __d_last)
773template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Compare>
778 const _ForwardIterator __res =
782 return __res == __last ? __last :
std::next(__res);
785template <
class _ExecutionPolicy,
class _ForwardIterator>
787is_sorted_until(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last)
793template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Compare>
795is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
803template <
class _ExecutionPolicy,
class _ForwardIterator>
805is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last)
812template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator,
815merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
816 _ForwardIterator2 __last2, _ForwardIterator __d_first,
_Compare __comp)
821 __last1, __first2, __last2, __d_first, __comp);
824template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator>
826merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
827 _ForwardIterator2 __last2, _ForwardIterator __d_first)
833template <
class _ExecutionPolicy,
class _B
idirectionalIterator,
class _Compare>
835inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle,
836 _BidirectionalIterator __last,
_Compare __comp)
841 __middle, __last, __comp);
844template <
class _ExecutionPolicy,
class _B
idirectionalIterator>
846inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle,
847 _BidirectionalIterator __last)
855template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _Compare>
857includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
858 _ForwardIterator2 __last2,
_Compare __comp)
863 __last1, __first2, __last2, __comp);
866template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
868includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
869 _ForwardIterator2 __last2)
876template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator,
879set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
880 _ForwardIterator2 __last2, _ForwardIterator __result,
_Compare __comp)
885 __last1, __first2, __last2, __result, __comp);
888template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator>
890set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
891 _ForwardIterator2 __last2, _ForwardIterator __result)
899template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator,
902set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
903 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result,
_Compare __comp)
908 __first1, __last1, __first2, __last2, __result, __comp);
911template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator>
913set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
914 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result)
922template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator,
925set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
926 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result,
_Compare __comp)
931 __first1, __last1, __first2, __last2, __result, __comp);
934template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator>
936set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
937 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result)
945template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator,
949 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result,
958template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _ForwardIterator>
961 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result)
968template <
class _ExecutionPolicy,
class _RandomAccessIterator,
class _Compare>
970is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
978template <
class _ExecutionPolicy,
class _RandomAccessIterator>
980is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last)
986template <
class _ExecutionPolicy,
class _RandomAccessIterator,
class _Compare>
988is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
993template <
class _ExecutionPolicy,
class _RandomAccessIterator>
995is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last)
1003template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Compare>
1012template <
class _ExecutionPolicy,
class _ForwardIterator>
1014min_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last)
1020template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Compare>
1028template <
class _ExecutionPolicy,
class _ForwardIterator>
1030max_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last)
1037template <
class _ExecutionPolicy,
class _ForwardIterator,
class _Compare>
1046template <
class _ExecutionPolicy,
class _ForwardIterator>
1048minmax_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last)
1056template <
class _ExecutionPolicy,
class _RandomAccessIterator,
class _Compare>
1058nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth,
1059 _RandomAccessIterator __last,
_Compare __comp)
1067template <
class _ExecutionPolicy,
class _RandomAccessIterator>
1069nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth,
1070 _RandomAccessIterator __last)
1078template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2,
class _Compare>
1081 _ForwardIterator2 __first2, _ForwardIterator2 __last2,
_Compare __comp)
1086 __first1, __last1, __first2, __last2, __comp);
1089template <
class _ExecutionPolicy,
class _ForwardIterator1,
class _ForwardIterator2>
1092 _ForwardIterator2 __first2, _ForwardIterator2 __last2)
constexpr _FIter remove(_FIter, _FIter, const _Tp &)
_GLIBCXX_SIMD_ALWAYS_INLINE _GLIBCXX_SIMD_CONSTEXPR bool none_of(const simd_mask< _Tp, _Abi > &__k) noexcept
_GLIBCXX_SIMD_ALWAYS_INLINE _GLIBCXX_SIMD_CONSTEXPR bool any_of(const simd_mask< _Tp, _Abi > &__k) noexcept
_GLIBCXX_SIMD_ALWAYS_INLINE _GLIBCXX_SIMD_CONSTEXPR bool all_of(const simd_mask< _Tp, _Abi > &__k) noexcept
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
constexpr _Tp && forward(typename std::remove_reference< _Tp >::type &__t) noexcept
Forward an lvalue.
constexpr _InputIterator for_each_n(_InputIterator __first, _Size __n, _Function __f)
Apply a function to every element of a sequence.
constexpr bool is_heap(_RAIter, _RAIter)
void inplace_merge(_BIter, _BIter, _BIter)
constexpr bool lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2)
constexpr _OIter reverse_copy(_BIter, _BIter, _OIter)
constexpr void partial_sort(_RAIter, _RAIter, _RAIter)
constexpr _FIter search_n(_FIter, _FIter, _Size, const _Tp &)
constexpr _IIter find_if(_IIter, _IIter, _Predicate)
constexpr _Funct for_each(_IIter, _IIter, _Funct)
constexpr _OIter transform(_IIter, _IIter, _OIter, _UnaryOperation)
constexpr _IIter find_if_not(_IIter, _IIter, _Predicate)
constexpr void generate(_FIter, _FIter, _Generator)
constexpr _IIter find(_IIter, _IIter, const _Tp &)
constexpr _OIter replace_copy(_IIter, _IIter, _OIter, const _Tp &, const _Tp &)
constexpr iterator_traits< _IIter >::difference_type count_if(_IIter, _IIter, _Predicate)
constexpr _FIter remove_if(_FIter, _FIter, _Predicate)
constexpr void sort(_RAIter, _RAIter)
constexpr bool is_partitioned(_IIter, _IIter, _Predicate)
constexpr iterator_traits< _InputIterator >::difference_type distance(_InputIterator __first, _InputIterator __last)
A generalization of pointer arithmetic.
constexpr _FIter min_element(_FIter, _FIter)
constexpr _OIter copy(_IIter, _IIter, _OIter)
constexpr _FIter1 search(_FIter1, _FIter1, _FIter2, _FIter2)
constexpr _OIter set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter)
constexpr _FIter1 find_end(_FIter1, _FIter1, _FIter2, _FIter2)
constexpr pair< _OIter1, _OIter2 > partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate)
constexpr _OIter unique_copy(_IIter, _IIter, _OIter)
constexpr void nth_element(_RAIter, _RAIter, _RAIter)
constexpr bool equal(_IIter1, _IIter1, _IIter2)
constexpr _OIter rotate_copy(_FIter, _FIter, _FIter, _OIter)
constexpr _FIter is_sorted_until(_FIter, _FIter)
constexpr pair< _FIter, _FIter > minmax_element(_FIter, _FIter)
constexpr bool any_of(_IIter, _IIter, _Predicate)
constexpr __enable_if_t< __array_traits< _Tp, _Nm >::_Is_swappable::value > swap(array< _Tp, _Nm > &__one, array< _Tp, _Nm > &__two) noexcept(noexcept(__one.swap(__two)))
constexpr void fill(_FIter, _FIter, const _Tp &)
constexpr _InputIterator next(_InputIterator __x, typename iterator_traits< _InputIterator >::difference_type __n=1)
constexpr _OIter copy_if(_IIter, _IIter, _OIter, _Predicate)
constexpr _OIter set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter)
constexpr _OIter remove_copy_if(_IIter, _IIter, _OIter, _Predicate)
_BIter stable_partition(_BIter, _BIter, _Predicate)
constexpr bool is_sorted(_FIter, _FIter)
constexpr _FIter1 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2)
constexpr void replace(_FIter, _FIter, const _Tp &, const _Tp &)
constexpr _OIter generate_n(_OIter, _Size, _Generator)
constexpr _OIter copy_n(_IIter, _Size, _OIter)
constexpr _FIter2 swap_ranges(_FIter1, _FIter1, _FIter2)
constexpr _OIter fill_n(_OIter, _Size, const _Tp &)
constexpr pair< _IIter1, _IIter2 > mismatch(_IIter1, _IIter1, _IIter2)
constexpr void reverse(_BIter, _BIter)
constexpr _FIter max_element(_FIter, _FIter)
constexpr void replace_if(_FIter, _FIter, _Predicate, const _Tp &)
constexpr iterator_traits< _IIter >::difference_type count(_IIter, _IIter, const _Tp &)
constexpr _FIter adjacent_find(_FIter, _FIter)
constexpr _BIter partition(_BIter, _BIter, _Predicate)
void stable_sort(_RAIter, _RAIter)
constexpr bool includes(_IIter1, _IIter1, _IIter2, _IIter2)
constexpr _OIter merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter)
constexpr _RAIter is_heap_until(_RAIter, _RAIter)
constexpr _OIter replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp &)
constexpr _OIter remove_copy(_IIter, _IIter, _OIter, const _Tp &)
constexpr _OIter set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter)
constexpr _OIter set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter)
constexpr _RAIter partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter)
constexpr _FIter unique(_FIter, _FIter)
ISO C++ entities toplevel namespace is std.
constexpr _FIter rotate(_FIter, _FIter, _FIter)
bool __pattern_lexicographical_compare(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _Compare) noexcept
_BidirectionalIterator __pattern_stable_partition(_Tag, _ExecutionPolicy &&, _BidirectionalIterator, _BidirectionalIterator, _UnaryPredicate) noexcept
bool __pattern_equal(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _BinaryPredicate) noexcept
void __pattern_fill(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, const _Tp &) noexcept
_ForwardIterator __pattern_unique(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _BinaryPredicate) noexcept
_ForwardIterator __pattern_search_n(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _Size, const _Tp &, _BinaryPredicate) noexcept
_OutputIterator __brick_copy_n(_ForwardIterator, _Size, _OutputIterator, std::false_type) noexcept
std::iterator_traits< _ForwardIterator >::difference_type __pattern_count(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _Predicate) noexcept
void __pattern_partial_sort(_Tag, _ExecutionPolicy &&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) noexcept
void __pattern_inplace_merge(_Tag, _ExecutionPolicy &&, _BidirectionalIterator, _BidirectionalIterator, _BidirectionalIterator, _Compare) noexcept
bool __pattern_any_of(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _Pred) noexcept
bool __pattern_is_partitioned(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _UnaryPredicate) noexcept
_OutputIterator __pattern_fill_n(_Tag, _ExecutionPolicy &&, _OutputIterator, _Size, const _Tp &) noexcept
_OutputIterator __pattern_set_union(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _OutputIterator, _Compare) noexcept
typename std::enable_if< __pstl::execution::is_execution_policy< std::__remove_cvref_t< _ExecPolicy > >::value, _Tp >::type __enable_if_execution_policy
_ForwardIterator1 __pattern_find_end(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _BinaryPredicate) noexcept
_ForwardIterator2 __pattern_walk2_brick(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Brick) noexcept
_ForwardIterator __pattern_partition(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _UnaryPredicate) noexcept
_ForwardIterator __pattern_walk1_n(_Tag, _ExecutionPolicy &&, _ForwardIterator, _Size, _Function) noexcept
_OutputIterator __pattern_reverse_copy(_Tag, _ExecutionPolicy &&, _BidirectionalIterator, _BidirectionalIterator, _OutputIterator) noexcept
void __pattern_reverse(_Tag, _ExecutionPolicy &&, _BidirectionalIterator, _BidirectionalIterator) noexcept
void __pattern_nth_element(_Tag, _ExecutionPolicy &&, _RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) noexcept
_OutputIterator __brick_move(_ForwardIterator, _ForwardIterator, _OutputIterator, std::false_type) noexcept
_OutputIterator __pattern_generate_n(_Tag, _ExecutionPolicy &&, _OutputIterator, _Size, _Generator) noexcept
std::pair< _OutputIterator1, _OutputIterator2 > __pattern_partition_copy(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _OutputIterator1, _OutputIterator2, _UnaryPredicate) noexcept
_OutputIterator __pattern_set_symmetric_difference(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _OutputIterator, _Compare) noexcept
_ForwardIterator __pattern_min_element(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _Compare) noexcept
_OutputIterator __pattern_rotate_copy(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _ForwardIterator, _OutputIterator) noexcept
void __pattern_generate(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _Generator) noexcept
_OutputIterator __pattern_set_difference(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _OutputIterator, _Compare) noexcept
void __pattern_walk1(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _Function) noexcept
_OutputIterator __pattern_merge(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _OutputIterator, _Compare) noexcept
_ForwardIterator __pattern_adjacent_find(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _BinaryPredicate, bool) noexcept
_ForwardIterator2 __pattern_walk2(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _Function) noexcept
_OutputIterator __pattern_unique_copy(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _OutputIterator, _BinaryPredicate) noexcept
_ForwardIterator2 __pattern_walk2_brick_n(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _Size, _ForwardIterator2, _Brick) noexcept
_ForwardIterator __pattern_rotate(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _ForwardIterator) noexcept
__serial_tag< std::false_type > __select_backend(__pstl::execution::sequenced_policy, _IteratorTypes &&...)
_ForwardIterator3 __pattern_walk3(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator3, _Function) noexcept
bool __pattern_includes(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _Compare) noexcept
_ForwardIterator __pattern_find_if(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _Predicate) noexcept
void __pattern_sort(_Tag, _ExecutionPolicy &&, _RandomAccessIterator, _RandomAccessIterator, _Compare, _IsMoveConstructible) noexcept
void __pattern_stable_sort(_Tag, _ExecutionPolicy &&, _RandomAccessIterator, _RandomAccessIterator, _Compare) noexcept
_ForwardIterator1 __pattern_find_first_of(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _BinaryPredicate) noexcept
std::pair< _ForwardIterator, _ForwardIterator > __pattern_minmax_element(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _Compare) noexcept
_RandomAccessIterator __pattern_is_heap_until(_Tag, _ExecutionPolicy &&, _RandomAccessIterator, _RandomAccessIterator, _Compare) noexcept
_OutputIterator __pattern_copy_if(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _OutputIterator, _UnaryPredicate) noexcept
_ForwardIterator1 __pattern_search(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _BinaryPredicate) noexcept
_ForwardIterator __pattern_remove_if(_Tag, _ExecutionPolicy &&, _ForwardIterator, _ForwardIterator, _UnaryPredicate) noexcept
_RandomAccessIterator2 __pattern_partial_sort_copy(_Tag, _ExecutionPolicy &&, _RandomAccessIterator1, _RandomAccessIterator1, _RandomAccessIterator2, _RandomAccessIterator2, _Compare) noexcept
_OutputIterator __pattern_set_intersection(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _OutputIterator, _Compare) noexcept
std::pair< _ForwardIterator1, _ForwardIterator2 > __pattern_mismatch(_Tag, _ExecutionPolicy &&, _ForwardIterator1, _ForwardIterator1, _ForwardIterator2, _ForwardIterator2, _Predicate) noexcept
_OutputIterator __brick_copy(_ForwardIterator, _ForwardIterator, _OutputIterator, std::false_type) noexcept
Traits class for iterators.
One of the comparison functors.
One of the comparison functors.
Like a polymorphic lambda for ==value.
Logical negation of ==value.