37#ifndef _GLIBCXX_PARALLEL_ALGO_H
38#define _GLIBCXX_PARALLEL_ALGO_H 1
61namespace std _GLIBCXX_VISIBILITY(default)
66 template<
typename _IIter,
typename _Function>
68 for_each(_IIter __begin, _IIter __end, _Function __f,
70 {
return _GLIBCXX_STD_A::for_each(__begin, __end, __f); }
73 template<
typename _IIter,
typename _Function,
typename _IteratorTag>
75 __for_each_switch(_IIter __begin, _IIter __end, _Function __f,
80 template<
typename _RAIter,
typename _Function>
82 __for_each_switch(_RAIter __begin, _RAIter __end,
89 && __gnu_parallel::__is_parallel(__parallelism_tag)))
96 __begin, __end, __f, __functionality,
105 template<
typename _Iterator,
typename _Function>
107 for_each(_Iterator __begin, _Iterator __end, _Function __f,
110 return __for_each_switch(__begin, __end, __f,
115 template<
typename _Iterator,
typename _Function>
117 for_each(_Iterator __begin, _Iterator __end, _Function __f)
119 return __for_each_switch(__begin, __end, __f,
124 template<
typename _IIter,
typename _Tp>
126 find(_IIter __begin, _IIter __end,
const _Tp& __val,
128 {
return _GLIBCXX_STD_A::find(__begin, __end, __val); }
131 template<
typename _IIter,
typename _Tp,
typename _IteratorTag>
133 __find_switch(_IIter __begin, _IIter __end,
const _Tp& __val,
135 {
return _GLIBCXX_STD_A::find(__begin, __end, __val); }
138 template<
typename _RAIter,
typename _Tp>
140 __find_switch(_RAIter __begin, _RAIter __end,
144 typedef typename _TraitsType::value_type _ValueType;
150 _ValueType,
const _Tp&,
bool>
153 __begin, __end, __begin, __comp,
157 return _GLIBCXX_STD_A::find(__begin, __end, __val);
161 template<
typename _IIter,
typename _Tp>
163 find(_IIter __begin, _IIter __end,
const _Tp& __val)
165 return __find_switch(__begin, __end, __val,
170 template<
typename _IIter,
typename _Predicate>
172 find_if(_IIter __begin, _IIter __end, _Predicate __pred,
174 {
return _GLIBCXX_STD_A::find_if(__begin, __end, __pred); }
177 template<
typename _IIter,
typename _Predicate,
typename _IteratorTag>
179 __find_if_switch(_IIter __begin, _IIter __end, _Predicate __pred,
181 {
return _GLIBCXX_STD_A::find_if(__begin, __end, __pred); }
184 template<
typename _RAIter,
typename _Predicate>
186 __find_if_switch(_RAIter __begin, _RAIter __end,
192 __find_if_selector()).first;
194 return _GLIBCXX_STD_A::find_if(__begin, __end, __pred);
198 template<
typename _IIter,
typename _Predicate>
200 find_if(_IIter __begin, _IIter __end, _Predicate __pred)
202 return __find_if_switch(__begin, __end, __pred,
207 template<
typename _IIter,
typename _FIterator>
209 find_first_of(_IIter __begin1, _IIter __end1,
210 _FIterator __begin2, _FIterator __end2,
213 return _GLIBCXX_STD_A::find_first_of(__begin1, __end1, __begin2, __end2);
217 template<
typename _IIter,
typename _FIterator,
218 typename _BinaryPredicate>
220 find_first_of(_IIter __begin1, _IIter __end1,
221 _FIterator __begin2, _FIterator __end2,
223 {
return _GLIBCXX_STD_A::find_first_of(
224 __begin1, __end1, __begin2, __end2, __comp); }
227 template<
typename _IIter,
typename _FIterator,
228 typename _IteratorTag1,
typename _IteratorTag2>
230 __find_first_of_switch(_IIter __begin1, _IIter __end1,
231 _FIterator __begin2, _FIterator __end2,
232 _IteratorTag1, _IteratorTag2)
233 {
return find_first_of(__begin1, __end1, __begin2, __end2,
237 template<
typename _RAIter,
typename _FIterator,
238 typename _BinaryPredicate,
typename _IteratorTag>
240 __find_first_of_switch(_RAIter __begin1,
242 _FIterator __begin2, _FIterator __end2,
249 <_FIterator>(__begin2, __end2)).first;
253 template<
typename _IIter,
typename _FIterator,
254 typename _BinaryPredicate,
typename _IteratorTag1,
255 typename _IteratorTag2>
257 __find_first_of_switch(_IIter __begin1, _IIter __end1,
258 _FIterator __begin2, _FIterator __end2,
259 _BinaryPredicate __comp, _IteratorTag1, _IteratorTag2)
260 {
return find_first_of(__begin1, __end1, __begin2, __end2, __comp,
264 template<
typename _IIter,
typename _FIterator,
265 typename _BinaryPredicate>
267 find_first_of(_IIter __begin1, _IIter __end1,
268 _FIterator __begin2, _FIterator __end2,
269 _BinaryPredicate __comp)
271 return __find_first_of_switch(__begin1, __end1, __begin2, __end2, __comp,
277 template<
typename _IIter,
typename _FIterator>
279 find_first_of(_IIter __begin1, _IIter __end1,
280 _FIterator __begin2, _FIterator __end2)
285 return __gnu_parallel::find_first_of(__begin1, __end1, __begin2, __end2,
290 template<
typename _IIter,
typename _OutputIterator>
291 inline _OutputIterator
292 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
294 {
return _GLIBCXX_STD_A::unique_copy(__begin1, __end1, __out); }
297 template<
typename _IIter,
typename _OutputIterator,
299 inline _OutputIterator
300 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
302 {
return _GLIBCXX_STD_A::unique_copy(__begin1, __end1, __out, __pred); }
305 template<
typename _IIter,
typename _OutputIterator,
306 typename _Predicate,
typename _IteratorTag1,
typename _IteratorTag2>
307 inline _OutputIterator
308 __unique_copy_switch(_IIter __begin, _IIter __last,
309 _OutputIterator __out, _Predicate __pred,
310 _IteratorTag1, _IteratorTag2)
311 {
return _GLIBCXX_STD_A::unique_copy(__begin, __last, __out, __pred); }
314 template<
typename _RAIter,
typename _RandomAccessOutputIterator,
316 _RandomAccessOutputIterator
317 __unique_copy_switch(_RAIter __begin, _RAIter __last,
318 _RandomAccessOutputIterator __out, _Predicate __pred,
325 __begin, __last, __out, __pred);
327 return _GLIBCXX_STD_A::unique_copy(__begin, __last, __out, __pred);
331 template<
typename _IIter,
typename _OutputIterator>
332 inline _OutputIterator
333 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out)
337 return __unique_copy_switch(
344 template<
typename _IIter,
typename _OutputIterator,
typename _Predicate>
345 inline _OutputIterator
346 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
349 return __unique_copy_switch(
350 __begin1, __end1, __out, __pred,
356 template<
typename _IIter1,
typename _IIter2,
357 typename _OutputIterator>
358 inline _OutputIterator
359 set_union(_IIter1 __begin1, _IIter1 __end1,
360 _IIter2 __begin2, _IIter2 __end2,
362 {
return _GLIBCXX_STD_A::set_union(
363 __begin1, __end1, __begin2, __end2, __out); }
366 template<
typename _IIter1,
typename _IIter2,
367 typename _OutputIterator,
typename _Predicate>
368 inline _OutputIterator
369 set_union(_IIter1 __begin1, _IIter1 __end1,
370 _IIter2 __begin2, _IIter2 __end2,
371 _OutputIterator __out, _Predicate __pred,
373 {
return _GLIBCXX_STD_A::set_union(__begin1, __end1,
374 __begin2, __end2, __out, __pred); }
377 template<
typename _IIter1,
typename _IIter2,
typename _Predicate,
378 typename _OutputIterator,
typename _IteratorTag1,
379 typename _IteratorTag2,
typename _IteratorTag3>
380 inline _OutputIterator
382 _IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _IIter2 __end2,
383 _OutputIterator __result, _Predicate __pred,
384 _IteratorTag1, _IteratorTag2, _IteratorTag3)
385 {
return _GLIBCXX_STD_A::set_union(__begin1, __end1,
386 __begin2, __end2, __result, __pred); }
389 template<
typename _RAIter1,
typename _RAIter2,
390 typename _Output_RAIter,
typename _Predicate>
392 __set_union_switch(_RAIter1 __begin1, _RAIter1 __end1,
393 _RAIter2 __begin2, _RAIter2 __end2,
394 _Output_RAIter __result, _Predicate __pred,
403 return __gnu_parallel::__parallel_set_union(
404 __begin1, __end1, __begin2, __end2, __result, __pred);
406 return _GLIBCXX_STD_A::set_union(__begin1, __end1,
407 __begin2, __end2, __result, __pred);
411 template<
typename _IIter1,
typename _IIter2,
412 typename _OutputIterator>
413 inline _OutputIterator
414 set_union(_IIter1 __begin1, _IIter1 __end1,
415 _IIter2 __begin2, _IIter2 __end2, _OutputIterator __out)
420 return __set_union_switch(
421 __begin1, __end1, __begin2, __end2, __out,
429 template<
typename _IIter1,
typename _IIter2,
430 typename _OutputIterator,
typename _Predicate>
431 inline _OutputIterator
432 set_union(_IIter1 __begin1, _IIter1 __end1,
433 _IIter2 __begin2, _IIter2 __end2,
434 _OutputIterator __out, _Predicate __pred)
436 return __set_union_switch(
437 __begin1, __end1, __begin2, __end2, __out, __pred,
444 template<
typename _IIter1,
typename _IIter2,
445 typename _OutputIterator>
446 inline _OutputIterator
447 set_intersection(_IIter1 __begin1, _IIter1 __end1,
448 _IIter2 __begin2, _IIter2 __end2,
450 {
return _GLIBCXX_STD_A::set_intersection(__begin1, __end1,
451 __begin2, __end2, __out); }
454 template<
typename _IIter1,
typename _IIter2,
455 typename _OutputIterator,
typename _Predicate>
456 inline _OutputIterator
457 set_intersection(_IIter1 __begin1, _IIter1 __end1,
458 _IIter2 __begin2, _IIter2 __end2,
459 _OutputIterator __out, _Predicate __pred,
461 {
return _GLIBCXX_STD_A::set_intersection(
462 __begin1, __end1, __begin2, __end2, __out, __pred); }
465 template<
typename _IIter1,
typename _IIter2,
466 typename _Predicate,
typename _OutputIterator,
467 typename _IteratorTag1,
typename _IteratorTag2,
468 typename _IteratorTag3>
469 inline _OutputIterator
470 __set_intersection_switch(_IIter1 __begin1, _IIter1 __end1,
471 _IIter2 __begin2, _IIter2 __end2,
472 _OutputIterator __result, _Predicate __pred,
473 _IteratorTag1, _IteratorTag2, _IteratorTag3)
474 {
return _GLIBCXX_STD_A::set_intersection(__begin1, __end1, __begin2,
475 __end2, __result, __pred); }
478 template<
typename _RAIter1,
typename _RAIter2,
479 typename _Output_RAIter,
typename _Predicate>
481 __set_intersection_switch(_RAIter1 __begin1,
485 _Output_RAIter __result,
496 return __gnu_parallel::__parallel_set_intersection(
497 __begin1, __end1, __begin2, __end2, __result, __pred);
499 return _GLIBCXX_STD_A::set_intersection(
500 __begin1, __end1, __begin2, __end2, __result, __pred);
504 template<
typename _IIter1,
typename _IIter2,
505 typename _OutputIterator>
506 inline _OutputIterator
507 set_intersection(_IIter1 __begin1, _IIter1 __end1,
508 _IIter2 __begin2, _IIter2 __end2,
509 _OutputIterator __out)
514 return __set_intersection_switch(
515 __begin1, __end1, __begin2, __end2, __out,
522 template<
typename _IIter1,
typename _IIter2,
523 typename _OutputIterator,
typename _Predicate>
524 inline _OutputIterator
525 set_intersection(_IIter1 __begin1, _IIter1 __end1,
526 _IIter2 __begin2, _IIter2 __end2,
527 _OutputIterator __out, _Predicate __pred)
529 return __set_intersection_switch(
530 __begin1, __end1, __begin2, __end2, __out, __pred,
537 template<
typename _IIter1,
typename _IIter2,
538 typename _OutputIterator>
539 inline _OutputIterator
540 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
541 _IIter2 __begin2, _IIter2 __end2,
542 _OutputIterator __out,
544 {
return _GLIBCXX_STD_A::set_symmetric_difference(
545 __begin1, __end1, __begin2, __end2, __out); }
548 template<
typename _IIter1,
typename _IIter2,
549 typename _OutputIterator,
typename _Predicate>
550 inline _OutputIterator
551 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
552 _IIter2 __begin2, _IIter2 __end2,
553 _OutputIterator __out, _Predicate __pred,
555 {
return _GLIBCXX_STD_A::set_symmetric_difference(
556 __begin1, __end1, __begin2, __end2, __out, __pred); }
559 template<
typename _IIter1,
typename _IIter2,
560 typename _Predicate,
typename _OutputIterator,
561 typename _IteratorTag1,
typename _IteratorTag2,
562 typename _IteratorTag3>
563 inline _OutputIterator
564 __set_symmetric_difference_switch(
565 _IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _IIter2 __end2,
566 _OutputIterator __result, _Predicate __pred,
567 _IteratorTag1, _IteratorTag2, _IteratorTag3)
568 {
return _GLIBCXX_STD_A::set_symmetric_difference(
569 __begin1, __end1, __begin2, __end2, __result, __pred); }
572 template<
typename _RAIter1,
typename _RAIter2,
573 typename _Output_RAIter,
typename _Predicate>
575 __set_symmetric_difference_switch(_RAIter1 __begin1,
579 _Output_RAIter __result,
590 return __gnu_parallel::__parallel_set_symmetric_difference(
591 __begin1, __end1, __begin2, __end2, __result, __pred);
593 return _GLIBCXX_STD_A::set_symmetric_difference(
594 __begin1, __end1, __begin2, __end2, __result, __pred);
598 template<
typename _IIter1,
typename _IIter2,
599 typename _OutputIterator>
600 inline _OutputIterator
601 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
602 _IIter2 __begin2, _IIter2 __end2,
603 _OutputIterator __out)
608 return __set_symmetric_difference_switch(
609 __begin1, __end1, __begin2, __end2, __out,
617 template<
typename _IIter1,
typename _IIter2,
618 typename _OutputIterator,
typename _Predicate>
619 inline _OutputIterator
620 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
621 _IIter2 __begin2, _IIter2 __end2,
622 _OutputIterator __out, _Predicate __pred)
624 return __set_symmetric_difference_switch(
625 __begin1, __end1, __begin2, __end2, __out, __pred,
632 template<
typename _IIter1,
typename _IIter2,
633 typename _OutputIterator>
634 inline _OutputIterator
635 set_difference(_IIter1 __begin1, _IIter1 __end1,
636 _IIter2 __begin2, _IIter2 __end2,
638 {
return _GLIBCXX_STD_A::set_difference(
639 __begin1,__end1, __begin2, __end2, __out); }
642 template<
typename _IIter1,
typename _IIter2,
643 typename _OutputIterator,
typename _Predicate>
644 inline _OutputIterator
645 set_difference(_IIter1 __begin1, _IIter1 __end1,
646 _IIter2 __begin2, _IIter2 __end2,
647 _OutputIterator __out, _Predicate __pred,
649 {
return _GLIBCXX_STD_A::set_difference(__begin1, __end1,
650 __begin2, __end2, __out, __pred); }
653 template<
typename _IIter1,
typename _IIter2,
typename _Predicate,
654 typename _OutputIterator,
typename _IteratorTag1,
655 typename _IteratorTag2,
typename _IteratorTag3>
656 inline _OutputIterator
657 __set_difference_switch(_IIter1 __begin1, _IIter1 __end1,
658 _IIter2 __begin2, _IIter2 __end2,
659 _OutputIterator __result, _Predicate __pred,
660 _IteratorTag1, _IteratorTag2, _IteratorTag3)
661 {
return _GLIBCXX_STD_A::set_difference(
662 __begin1, __end1, __begin2, __end2, __result, __pred); }
665 template<
typename _RAIter1,
typename _RAIter2,
666 typename _Output_RAIter,
typename _Predicate>
668 __set_difference_switch(_RAIter1 __begin1,
672 _Output_RAIter __result, _Predicate __pred,
682 return __gnu_parallel::__parallel_set_difference(
683 __begin1, __end1, __begin2, __end2, __result, __pred);
685 return _GLIBCXX_STD_A::set_difference(
686 __begin1, __end1, __begin2, __end2, __result, __pred);
690 template<
typename _IIter1,
typename _IIter2,
691 typename _OutputIterator>
692 inline _OutputIterator
693 set_difference(_IIter1 __begin1, _IIter1 __end1,
694 _IIter2 __begin2, _IIter2 __end2,
695 _OutputIterator __out)
700 return __set_difference_switch(
701 __begin1, __end1, __begin2, __end2, __out,
709 template<
typename _IIter1,
typename _IIter2,
710 typename _OutputIterator,
typename _Predicate>
711 inline _OutputIterator
712 set_difference(_IIter1 __begin1, _IIter1 __end1,
713 _IIter2 __begin2, _IIter2 __end2,
714 _OutputIterator __out, _Predicate __pred)
716 return __set_difference_switch(
717 __begin1, __end1, __begin2, __end2, __out, __pred,
724 template<
typename _FIterator>
726 adjacent_find(_FIterator __begin, _FIterator __end,
728 {
return _GLIBCXX_STD_A::adjacent_find(__begin, __end); }
731 template<
typename _FIterator,
typename _BinaryPredicate>
733 adjacent_find(_FIterator __begin, _FIterator __end,
734 _BinaryPredicate __binary_pred,
736 {
return _GLIBCXX_STD_A::adjacent_find(__begin, __end, __binary_pred); }
739 template<
typename _RAIter>
741 __adjacent_find_switch(_RAIter __begin, _RAIter __end,
745 typedef typename _TraitsType::value_type _ValueType;
754 if (__spot == (__end - 1))
764 template<
typename _FIterator,
typename _IteratorTag>
766 __adjacent_find_switch(_FIterator __begin, _FIterator __end,
771 template<
typename _FIterator>
773 adjacent_find(_FIterator __begin, _FIterator __end)
775 return __adjacent_find_switch(__begin, __end,
780 template<
typename _FIterator,
typename _BinaryPredicate,
781 typename _IteratorTag>
783 __adjacent_find_switch(_FIterator __begin, _FIterator __end,
784 _BinaryPredicate __pred, _IteratorTag)
785 {
return adjacent_find(__begin, __end, __pred,
789 template<
typename _RAIter,
typename _BinaryPredicate>
791 __adjacent_find_switch(_RAIter __begin, _RAIter __end,
797 __adjacent_find_selector()).first;
799 return adjacent_find(__begin, __end, __pred,
804 template<
typename _FIterator,
typename _BinaryPredicate>
806 adjacent_find(_FIterator __begin, _FIterator __end,
807 _BinaryPredicate __pred)
809 return __adjacent_find_switch(__begin, __end, __pred,
814 template<
typename _IIter,
typename _Tp>
816 count(_IIter __begin, _IIter __end,
const _Tp& __value,
818 {
return _GLIBCXX_STD_A::count(__begin, __end, __value); }
821 template<
typename _RAIter,
typename _Tp>
823 __count_switch(_RAIter __begin, _RAIter __end,
828 typedef typename _TraitsType::value_type _ValueType;
829 typedef typename _TraitsType::difference_type _DifferenceType;
833 static_cast<_SequenceIndex
>(__end - __begin)
835 && __gnu_parallel::__is_parallel(__parallelism_tag)))
839 _DifferenceType __res = 0;
842 __begin, __end, __value, __functionality,
848 return count(__begin, __end, __value,
853 template<
typename _IIter,
typename _Tp,
typename _IteratorTag>
855 __count_switch(_IIter __begin, _IIter __end,
const _Tp& __value,
861 template<
typename _IIter,
typename _Tp>
863 count(_IIter __begin, _IIter __end,
const _Tp& __value,
866 return __count_switch(__begin, __end, __value,
871 template<
typename _IIter,
typename _Tp>
873 count(_IIter __begin, _IIter __end,
const _Tp& __value)
875 return __count_switch(__begin, __end, __value,
881 template<
typename _IIter,
typename _Predicate>
883 count_if(_IIter __begin, _IIter __end, _Predicate __pred,
885 {
return _GLIBCXX_STD_A::count_if(__begin, __end, __pred); }
888 template<
typename _RAIter,
typename _Predicate>
890 __count_if_switch(_RAIter __begin, _RAIter __end,
895 typedef typename _TraitsType::value_type _ValueType;
896 typedef typename _TraitsType::difference_type _DifferenceType;
900 static_cast<_SequenceIndex
>(__end - __begin)
902 && __gnu_parallel::__is_parallel(__parallelism_tag)))
904 _DifferenceType __res = 0;
906 __count_if_selector<_RAIter, _DifferenceType>
910 __begin, __end, __pred, __functionality,
916 return count_if(__begin, __end, __pred,
921 template<
typename _IIter,
typename _Predicate,
typename _IteratorTag>
923 __count_if_switch(_IIter __begin, _IIter __end, _Predicate __pred,
925 {
return count_if(__begin, __end, __pred,
929 template<
typename _IIter,
typename _Predicate>
931 count_if(_IIter __begin, _IIter __end, _Predicate __pred,
934 return __count_if_switch(__begin, __end, __pred,
939 template<
typename _IIter,
typename _Predicate>
941 count_if(_IIter __begin, _IIter __end, _Predicate __pred)
943 return __count_if_switch(__begin, __end, __pred,
949 template<
typename _FIterator1,
typename _FIterator2>
951 search(_FIterator1 __begin1, _FIterator1 __end1,
952 _FIterator2 __begin2, _FIterator2 __end2,
954 {
return _GLIBCXX_STD_A::search(__begin1, __end1, __begin2, __end2); }
957 template<
typename _RAIter1,
typename _RAIter2>
959 __search_switch(_RAIter1 __begin1, _RAIter1 __end1,
960 _RAIter2 __begin2, _RAIter2 __end2,
971 __begin1, __end1, __begin2, __end2,
974 return search(__begin1, __end1, __begin2, __end2,
979 template<
typename _FIterator1,
typename _FIterator2,
980 typename _IteratorTag1,
typename _IteratorTag2>
982 __search_switch(_FIterator1 __begin1, _FIterator1 __end1,
983 _FIterator2 __begin2, _FIterator2 __end2,
984 _IteratorTag1, _IteratorTag2)
985 {
return search(__begin1, __end1, __begin2, __end2,
989 template<
typename _FIterator1,
typename _FIterator2>
991 search(_FIterator1 __begin1, _FIterator1 __end1,
992 _FIterator2 __begin2, _FIterator2 __end2)
994 return __search_switch(__begin1, __end1, __begin2, __end2,
999#if __cplusplus >= 201703L
1007 template<
typename _ForwardIterator,
typename _Searcher>
1008 inline _ForwardIterator
1009 search(_ForwardIterator __first, _ForwardIterator __last,
1010 const _Searcher& __searcher)
1011 {
return __searcher(__first, __last).first; }
1015 template<
typename _FIterator,
typename _Integer,
typename _Tp>
1017 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1019 {
return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val); }
1022 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1023 typename _BinaryPredicate>
1025 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1026 const _Tp& __val, _BinaryPredicate __binary_pred,
1028 {
return _GLIBCXX_STD_A::search_n(
1029 __begin, __end, __count, __val, __binary_pred); }
1032 template<
typename _FIterator,
typename _Integer,
typename _Tp>
1034 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1037 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
1038 return __gnu_parallel::search_n(__begin, __end, __count, __val,
1043 template<
typename _RAIter,
typename _Integer,
1044 typename _Tp,
typename _BinaryPredicate>
1046 __search_n_switch(_RAIter __begin, _RAIter __end, _Integer __count,
1047 const _Tp& __val, _BinaryPredicate __binary_pred,
1048 random_access_iterator_tag)
1056 __begin, __end, __ps.begin(), __ps.end(), __binary_pred);
1059 return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
1064 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1065 typename _BinaryPredicate,
typename _IteratorTag>
1067 __search_n_switch(_FIterator __begin, _FIterator __end, _Integer __count,
1068 const _Tp& __val, _BinaryPredicate __binary_pred,
1070 {
return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
1074 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1075 typename _BinaryPredicate>
1077 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1078 const _Tp& __val, _BinaryPredicate __binary_pred)
1080 return __search_n_switch(__begin, __end, __count, __val, __binary_pred,
1086 template<
typename _IIter,
typename _OutputIterator,
1087 typename _UnaryOperation>
1088 inline _OutputIterator
1089 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1091 {
return _GLIBCXX_STD_A::transform(__begin, __end, __result, __unary_op); }
1094 template<
typename _RAIter1,
typename _RAIter2,
1095 typename _UnaryOperation>
1097 __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
1098 _RAIter2 __result, _UnaryOperation __unary_op,
1099 random_access_iterator_tag, random_access_iterator_tag,
1105 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1107 bool __dummy =
true;
1109 _RAIter2, random_access_iterator_tag> _ItTrip;
1110 _ItTrip __begin_pair(__begin, __result),
1111 __end_pair(__end, __result + (__end - __begin));
1115 __begin_pair, __end_pair, __unary_op, __functionality,
1117 __dummy, __dummy, -1, __parallelism_tag);
1121 return transform(__begin, __end, __result, __unary_op,
1126 template<
typename _RAIter1,
typename _RAIter2,
1127 typename _UnaryOperation,
typename _IteratorTag1,
1128 typename _IteratorTag2>
1130 __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
1131 _RAIter2 __result, _UnaryOperation __unary_op,
1132 _IteratorTag1, _IteratorTag2)
1133 {
return transform(__begin, __end, __result, __unary_op,
1137 template<
typename _IIter,
typename _OutputIterator,
1138 typename _UnaryOperation>
1139 inline _OutputIterator
1140 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1141 _UnaryOperation __unary_op,
1144 return __transform1_switch(__begin, __end, __result, __unary_op,
1150 template<
typename _IIter,
typename _OutputIterator,
1151 typename _UnaryOperation>
1152 inline _OutputIterator
1153 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1154 _UnaryOperation __unary_op)
1156 return __transform1_switch(__begin, __end, __result, __unary_op,
1163 template<
typename _IIter1,
typename _IIter2,
1164 typename _OutputIterator,
typename _BinaryOperation>
1165 inline _OutputIterator
1166 transform(_IIter1 __begin1, _IIter1 __end1,
1167 _IIter2 __begin2, _OutputIterator __result,
1169 {
return _GLIBCXX_STD_A::transform(__begin1, __end1,
1170 __begin2, __result, __binary_op); }
1173 template<
typename _RAIter1,
typename _RAIter2,
1174 typename _RAIter3,
typename _BinaryOperation>
1176 __transform2_switch(_RAIter1 __begin1, _RAIter1 __end1,
1178 _RAIter3 __result, _BinaryOperation __binary_op,
1179 random_access_iterator_tag, random_access_iterator_tag,
1180 random_access_iterator_tag,
1184 (__end1 - __begin1) >=
1186 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1188 bool __dummy =
true;
1191 random_access_iterator_tag> _ItTrip;
1192 _ItTrip __begin_triple(__begin1, __begin2, __result),
1193 __end_triple(__end1, __begin2 + (__end1 - __begin1),
1194 __result + (__end1 - __begin1));
1198 __binary_op, __functionality,
1200 __dummy, __dummy, -1,
1205 return transform(__begin1, __end1, __begin2, __result, __binary_op,
1210 template<
typename _IIter1,
typename _IIter2,
1211 typename _OutputIterator,
typename _BinaryOperation,
1212 typename _Tag1,
typename _Tag2,
typename _Tag3>
1213 inline _OutputIterator
1214 __transform2_switch(_IIter1 __begin1, _IIter1 __end1,
1215 _IIter2 __begin2, _OutputIterator __result,
1216 _BinaryOperation __binary_op, _Tag1, _Tag2, _Tag3)
1217 {
return transform(__begin1, __end1, __begin2, __result, __binary_op,
1221 template<
typename _IIter1,
typename _IIter2,
1222 typename _OutputIterator,
typename _BinaryOperation>
1223 inline _OutputIterator
1224 transform(_IIter1 __begin1, _IIter1 __end1,
1225 _IIter2 __begin2, _OutputIterator __result,
1226 _BinaryOperation __binary_op,
1229 return __transform2_switch(
1230 __begin1, __end1, __begin2, __result, __binary_op,
1237 template<
typename _IIter1,
typename _IIter2,
1238 typename _OutputIterator,
typename _BinaryOperation>
1239 inline _OutputIterator
1240 transform(_IIter1 __begin1, _IIter1 __end1,
1241 _IIter2 __begin2, _OutputIterator __result,
1242 _BinaryOperation __binary_op)
1244 return __transform2_switch(
1245 __begin1, __end1, __begin2, __result, __binary_op,
1252 template<
typename _FIterator,
typename _Tp>
1254 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1256 { _GLIBCXX_STD_A::replace(__begin, __end, __old_value, __new_value); }
1259 template<
typename _FIterator,
typename _Tp,
typename _IteratorTag>
1261 __replace_switch(_FIterator __begin, _FIterator __end,
1262 const _Tp& __old_value,
const _Tp& __new_value,
1264 { replace(__begin, __end, __old_value, __new_value,
1268 template<
typename _RAIter,
typename _Tp>
1270 __replace_switch(_RAIter __begin, _RAIter __end,
1271 const _Tp& __old_value,
const _Tp& __new_value,
1272 random_access_iterator_tag,
1276 replace(__begin, __end, __old_value, __new_value,
1281 template<
typename _FIterator,
typename _Tp>
1283 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1284 const _Tp& __new_value,
1287 __replace_switch(__begin, __end, __old_value, __new_value,
1292 template<
typename _FIterator,
typename _Tp>
1294 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1295 const _Tp& __new_value)
1297 __replace_switch(__begin, __end, __old_value, __new_value,
1303 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1305 replace_if(_FIterator __begin, _FIterator __end, _Predicate __pred,
1307 { _GLIBCXX_STD_A::replace_if(__begin, __end, __pred, __new_value); }
1310 template<
typename _FIterator,
typename _Predicate,
typename _Tp,
1311 typename _IteratorTag>
1313 __replace_if_switch(_FIterator __begin, _FIterator __end,
1314 _Predicate __pred,
const _Tp& __new_value, _IteratorTag)
1315 { replace_if(__begin, __end, __pred, __new_value,
1319 template<
typename _RAIter,
typename _Predicate,
typename _Tp>
1321 __replace_if_switch(_RAIter __begin, _RAIter __end,
1322 _Predicate __pred,
const _Tp& __new_value,
1323 random_access_iterator_tag,
1329 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1333 __replace_if_selector<_RAIter, _Predicate, _Tp>
1334 __functionality(__new_value);
1337 __begin, __end, __pred, __functionality,
1339 true, __dummy, -1, __parallelism_tag);
1342 replace_if(__begin, __end, __pred, __new_value,
1347 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1349 replace_if(_FIterator __begin, _FIterator __end,
1350 _Predicate __pred,
const _Tp& __new_value,
1353 __replace_if_switch(__begin, __end, __pred, __new_value,
1358 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1360 replace_if(_FIterator __begin, _FIterator __end,
1361 _Predicate __pred,
const _Tp& __new_value)
1363 __replace_if_switch(__begin, __end, __pred, __new_value,
1368 template<
typename _FIterator,
typename _Generator>
1370 generate(_FIterator __begin, _FIterator __end, _Generator __gen,
1372 { _GLIBCXX_STD_A::generate(__begin, __end, __gen); }
1375 template<
typename _FIterator,
typename _Generator,
typename _IteratorTag>
1377 __generate_switch(_FIterator __begin, _FIterator __end, _Generator __gen,
1382 template<
typename _RAIter,
typename _Generator>
1384 __generate_switch(_RAIter __begin, _RAIter __end,
1385 _Generator __gen, random_access_iterator_tag,
1391 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1398 __begin, __end, __gen, __functionality,
1400 true, __dummy, -1, __parallelism_tag);
1407 template<
typename _FIterator,
typename _Generator>
1409 generate(_FIterator __begin, _FIterator __end,
1412 __generate_switch(__begin, __end, __gen,
1417 template<
typename _FIterator,
typename _Generator>
1419 generate(_FIterator __begin, _FIterator __end, _Generator __gen)
1421 __generate_switch(__begin, __end, __gen,
1427 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1428 inline _OutputIterator
1429 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen,
1431 {
return _GLIBCXX_STD_A::generate_n(__begin, __n, __gen); }
1434 template<
typename _OutputIterator,
typename _Size,
typename _Generator,
1435 typename _IteratorTag>
1436 inline _OutputIterator
1437 __generate_n_switch(_OutputIterator __begin, _Size __n, _Generator __gen,
1439 {
return generate_n(__begin, __n, __gen,
1443 template<
typename _RAIter,
typename _Size,
typename _Generator>
1445 __generate_n_switch(_RAIter __begin, _Size __n, _Generator __gen,
1446 random_access_iterator_tag,
1454 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1455 inline _OutputIterator
1456 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen,
1459 return __generate_n_switch(__begin, __n, __gen,
1464 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1465 inline _OutputIterator
1466 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen)
1468 return __generate_n_switch(__begin, __n, __gen,
1474 template<
typename _RAIter>
1476 random_shuffle(_RAIter __begin, _RAIter __end,
1478 { _GLIBCXX_STD_A::random_shuffle(__begin, __end); }
1481 template<
typename _RAIter,
typename _RandomNumberGenerator>
1483 random_shuffle(_RAIter __begin, _RAIter __end,
1484 _RandomNumberGenerator& __rand,
1486 { _GLIBCXX_STD_A::random_shuffle(__begin, __end, __rand); }
1490 template<
typename _MustBeInt =
int>
1494 operator()(
int __limit)
1495 {
return rand() % __limit; }
1499 template<
typename _RAIter>
1501 random_shuffle(_RAIter __begin, _RAIter __end)
1505 __gnu_parallel::random_shuffle(__begin, __end, __r);
1509 template<
typename _RAIter,
typename _RandomNumberGenerator>
1511 random_shuffle(_RAIter __begin, _RAIter __end,
1512#
if __cplusplus >= 201103L
1513 _RandomNumberGenerator&& __rand)
1515 _RandomNumberGenerator& __rand)
1518 if (__begin == __end)
1529 template<
typename _FIterator,
typename _Predicate>
1531 partition(_FIterator __begin, _FIterator __end,
1533 {
return _GLIBCXX_STD_A::partition(__begin, __end, __pred); }
1536 template<
typename _FIterator,
typename _Predicate,
typename _IteratorTag>
1538 __partition_switch(_FIterator __begin, _FIterator __end,
1539 _Predicate __pred, _IteratorTag)
1540 {
return partition(__begin, __end, __pred,
1544 template<
typename _RAIter,
typename _Predicate>
1546 __partition_switch(_RAIter __begin, _RAIter __end,
1547 _Predicate __pred, random_access_iterator_tag)
1554 difference_type _DifferenceType;
1557 __gnu_parallel::__get_max_threads());
1558 return __begin + __middle;
1561 return partition(__begin, __end, __pred,
1566 template<
typename _FIterator,
typename _Predicate>
1568 partition(_FIterator __begin, _FIterator __end, _Predicate __pred)
1570 return __partition_switch(__begin, __end, __pred,
1577 template<
typename _RAIter>
1579 sort(_RAIter __begin, _RAIter __end,
1581 { _GLIBCXX_STD_A::sort(__begin, __end); }
1584 template<
typename _RAIter,
typename _Compare>
1586 sort(_RAIter __begin, _RAIter __end, _Compare __comp,
1588 { _GLIBCXX_STD_A::sort<_RAIter, _Compare>(__begin, __end,
1592 template<
typename _RAIter,
typename _Compare,
1595 sort(_RAIter __begin, _RAIter __end, _Compare __comp,
1596 _Parallelism __parallelism)
1598 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1600 if (__begin != __end)
1605 __gnu_parallel::__parallel_sort<false>(
1606 __begin, __end, __comp, __parallelism);
1613 template<
typename _RAIter>
1615 sort(_RAIter __begin, _RAIter __end)
1617 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1623 template<
typename _RAIter>
1625 sort(_RAIter __begin, _RAIter __end,
1628 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1633 template<
typename _RAIter>
1635 sort(_RAIter __begin, _RAIter __end,
1638 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1643 template<
typename _RAIter>
1645 sort(_RAIter __begin, _RAIter __end,
1648 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1653 template<
typename _RAIter>
1655 sort(_RAIter __begin, _RAIter __end,
1658 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1663 template<
typename _RAIter>
1665 sort(_RAIter __begin, _RAIter __end,
1668 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1673 template<
typename _RAIter>
1675 sort(_RAIter __begin, _RAIter __end,
1678 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1683 template<
typename _RAIter>
1685 sort(_RAIter __begin, _RAIter __end,
1688 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1693 template<
typename _RAIter,
typename _Compare>
1695 sort(_RAIter __begin, _RAIter __end, _Compare __comp)
1697 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1705 template<
typename _RAIter>
1707 stable_sort(_RAIter __begin, _RAIter __end,
1709 { _GLIBCXX_STD_A::stable_sort(__begin, __end); }
1712 template<
typename _RAIter,
typename _Compare>
1714 stable_sort(_RAIter __begin, _RAIter __end,
1716 { _GLIBCXX_STD_A::stable_sort<_RAIter, _Compare>(__begin, __end, __comp); }
1719 template<
typename _RAIter,
typename _Compare,
1722 stable_sort(_RAIter __begin, _RAIter __end,
1723 _Compare __comp, _Parallelism __parallelism)
1725 typedef iterator_traits<_RAIter> _TraitsType;
1726 typedef typename _TraitsType::value_type _ValueType;
1728 if (__begin != __end)
1733 __gnu_parallel::__parallel_sort<true>(__begin, __end,
1734 __comp, __parallelism);
1736 stable_sort(__begin, __end, __comp,
1742 template<
typename _RAIter>
1744 stable_sort(_RAIter __begin, _RAIter __end)
1746 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1752 template<
typename _RAIter>
1754 stable_sort(_RAIter __begin, _RAIter __end,
1757 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1762 template<
typename _RAIter>
1764 stable_sort(_RAIter __begin, _RAIter __end,
1767 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1772 template<
typename _RAIter>
1774 stable_sort(_RAIter __begin, _RAIter __end,
1777 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1782 template<
typename _RAIter>
1784 stable_sort(_RAIter __begin, _RAIter __end,
1787 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1792 template<
typename _RAIter>
1794 stable_sort(_RAIter __begin, _RAIter __end,
1797 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1802 template<
typename _RAIter,
typename _Compare>
1804 stable_sort(_RAIter __begin, _RAIter __end, _Compare __comp)
1811 template<
typename _IIter1,
typename _IIter2,
1812 typename _OutputIterator>
1813 inline _OutputIterator
1814 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
1815 _IIter2 __end2, _OutputIterator __result,
1817 {
return _GLIBCXX_STD_A::merge(
1818 __begin1, __end1, __begin2, __end2, __result); }
1821 template<
typename _IIter1,
typename _IIter2,
1822 typename _OutputIterator,
typename _Compare>
1823 inline _OutputIterator
1824 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
1825 _IIter2 __end2, _OutputIterator __result, _Compare __comp,
1827 {
return _GLIBCXX_STD_A::merge(
1828 __begin1, __end1, __begin2, __end2, __result, __comp); }
1831 template<
typename _IIter1,
typename _IIter2,
typename _OutputIterator,
1832 typename _Compare,
typename _IteratorTag1,
1833 typename _IteratorTag2,
typename _IteratorTag3>
1834 inline _OutputIterator
1835 __merge_switch(_IIter1 __begin1, _IIter1 __end1,
1836 _IIter2 __begin2, _IIter2 __end2,
1837 _OutputIterator __result, _Compare __comp,
1838 _IteratorTag1, _IteratorTag2, _IteratorTag3)
1839 {
return _GLIBCXX_STD_A::merge(__begin1, __end1, __begin2, __end2,
1840 __result, __comp); }
1843 template<
typename _IIter1,
typename _IIter2,
1844 typename _OutputIterator,
typename _Compare>
1846 __merge_switch(_IIter1 __begin1, _IIter1 __end1,
1847 _IIter2 __begin2, _IIter2 __end2,
1848 _OutputIterator __result, _Compare __comp,
1849 random_access_iterator_tag, random_access_iterator_tag,
1850 random_access_iterator_tag)
1858 __begin1, __end1, __begin2, __end2, __result,
1859 (__end1 - __begin1) + (__end2 - __begin2), __comp);
1862 __begin1, __end1, __begin2, __end2, __result,
1863 (__end1 - __begin1) + (__end2 - __begin2), __comp);
1867 template<
typename _IIter1,
typename _IIter2,
1868 typename _OutputIterator,
typename _Compare>
1869 inline _OutputIterator
1870 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
1871 _IIter2 __end2, _OutputIterator __result, _Compare __comp)
1873 return __merge_switch(
1874 __begin1, __end1, __begin2, __end2, __result, __comp,
1881 template<
typename _IIter1,
typename _IIter2,
1882 typename _OutputIterator>
1883 inline _OutputIterator
1884 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
1885 _IIter2 __end2, _OutputIterator __result)
1890 return __gnu_parallel::merge(__begin1, __end1, __begin2, __end2,
1895 template<
typename _RAIter>
1897 nth_element(_RAIter __begin, _RAIter __nth,
1899 {
return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end); }
1902 template<
typename _RAIter,
typename _Compare>
1904 nth_element(_RAIter __begin, _RAIter __nth,
1905 _RAIter __end, _Compare __comp,
1907 {
return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end, __comp); }
1910 template<
typename _RAIter,
typename _Compare>
1912 nth_element(_RAIter __begin, _RAIter __nth,
1913 _RAIter __end, _Compare __comp)
1920 nth_element(__begin, __nth, __end, __comp,
1925 template<
typename _RAIter>
1927 nth_element(_RAIter __begin, _RAIter __nth,
1930 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1931 __gnu_parallel::nth_element(__begin, __nth, __end,
1936 template<
typename _RAIter,
typename _Compare>
1938 partial_sort(_RAIter __begin, _RAIter __middle,
1939 _RAIter __end, _Compare __comp,
1941 { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end, __comp); }
1944 template<
typename _RAIter>
1946 partial_sort(_RAIter __begin, _RAIter __middle,
1948 { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end); }
1951 template<
typename _RAIter,
typename _Compare>
1953 partial_sort(_RAIter __begin, _RAIter __middle,
1954 _RAIter __end, _Compare __comp)
1962 partial_sort(__begin, __middle, __end, __comp,
1967 template<
typename _RAIter>
1969 partial_sort(_RAIter __begin, _RAIter __middle,
1972 typedef iterator_traits<_RAIter> _TraitsType;
1973 typedef typename _TraitsType::value_type _ValueType;
1974 __gnu_parallel::partial_sort(__begin, __middle, __end,
1979 template<
typename _FIterator>
1981 max_element(_FIterator __begin, _FIterator __end,
1983 {
return _GLIBCXX_STD_A::max_element(__begin, __end); }
1986 template<
typename _FIterator,
typename _Compare>
1988 max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
1990 {
return _GLIBCXX_STD_A::max_element(__begin, __end, __comp); }
1993 template<
typename _FIterator,
typename _Compare,
typename _IteratorTag>
1995 __max_element_switch(_FIterator __begin, _FIterator __end,
1996 _Compare __comp, _IteratorTag)
1997 {
return max_element(__begin, __end, __comp,
2001 template<
typename _RAIter,
typename _Compare>
2003 __max_element_switch(_RAIter __begin, _RAIter __end,
2004 _Compare __comp, random_access_iterator_tag,
2010 && __gnu_parallel::__is_parallel(__parallelism_tag)))
2012 _RAIter __res(__begin);
2019 __res, __res, -1, __parallelism_tag);
2023 return max_element(__begin, __end, __comp,
2028 template<
typename _FIterator>
2030 max_element(_FIterator __begin, _FIterator __end,
2033 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2038 template<
typename _FIterator>
2040 max_element(_FIterator __begin, _FIterator __end)
2042 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2043 return __gnu_parallel::max_element(__begin, __end,
2048 template<
typename _FIterator,
typename _Compare>
2050 max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2053 return __max_element_switch(__begin, __end, __comp,
2058 template<
typename _FIterator,
typename _Compare>
2060 max_element(_FIterator __begin, _FIterator __end, _Compare __comp)
2062 return __max_element_switch(__begin, __end, __comp,
2068 template<
typename _FIterator>
2070 min_element(_FIterator __begin, _FIterator __end,
2072 {
return _GLIBCXX_STD_A::min_element(__begin, __end); }
2075 template<
typename _FIterator,
typename _Compare>
2077 min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2079 {
return _GLIBCXX_STD_A::min_element(__begin, __end, __comp); }
2082 template<
typename _FIterator,
typename _Compare,
typename _IteratorTag>
2084 __min_element_switch(_FIterator __begin, _FIterator __end,
2085 _Compare __comp, _IteratorTag)
2086 {
return min_element(__begin, __end, __comp,
2090 template<
typename _RAIter,
typename _Compare>
2092 __min_element_switch(_RAIter __begin, _RAIter __end,
2093 _Compare __comp, random_access_iterator_tag,
2099 && __gnu_parallel::__is_parallel(__parallelism_tag)))
2101 _RAIter __res(__begin);
2108 __res, __res, -1, __parallelism_tag);
2112 return min_element(__begin, __end, __comp,
2117 template<
typename _FIterator>
2119 min_element(_FIterator __begin, _FIterator __end,
2122 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2127 template<
typename _FIterator>
2129 min_element(_FIterator __begin, _FIterator __end)
2131 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2132 return __gnu_parallel::min_element(__begin, __end,
2137 template<
typename _FIterator,
typename _Compare>
2139 min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2142 return __min_element_switch(__begin, __end, __comp,
2147 template<
typename _FIterator,
typename _Compare>
2149 min_element(_FIterator __begin, _FIterator __end, _Compare __comp)
2151 return __min_element_switch(__begin, __end, __comp,
2155#if __cplusplus >= 201703L
2156 using _GLIBCXX_STD_A::for_each_n;
2157 using _GLIBCXX_STD_A::sample;
Sequential helper functions. This file is a GNU parallel extension to the Standard C++ Library.
Parallel implementation base for std::find(), std::equal() and related functions. This file is a GNU ...
_Function objects representing different tasks to be plugged into the parallel find algorithm....
Main interface for embarrassingly parallel functions.
Functors representing different tasks to be plugged into the generic parallelization methods for emba...
Helper iterator classes for the std::transform() functions. This file is a GNU parallel extension to ...
Parallel implementation of std::merge(). This file is a GNU parallel extension to the Standard C++ Li...
Parallelization of embarrassingly parallel execution by means of an OpenMP for loop....
Parallelization of embarrassingly parallel execution by means of an OpenMP for loop with static sched...
Parallelization of embarrassingly parallel execution by means of equal splitting. This file is a GNU ...
Parallel implementation of std::partition(), std::nth_element(), and std::partial_sort()....
Parallel implementation of std::random_shuffle(). This file is a GNU parallel extension to the Standa...
Parallel implementation base for std::search() and std::search_n(). This file is a GNU parallel exten...
Parallel implementations of set operations for random-access iterators. This file is a GNU parallel e...
#define _GLIBCXX_PARALLEL_CONDITION(__c)
Determine at compile(?)-time if the parallel variant of an algorithm should be called.
Parallel sorting algorithm switch. This file is a GNU parallel extension to the Standard C++ Library.
Parallel implementations of std::unique_copy(). This file is a GNU parallel extension to the Standard...
Parallelization of embarrassingly parallel execution by means of work-stealing.
constexpr iterator_traits< _Iter >::iterator_category __iterator_category(const _Iter &)
ISO C++ entities toplevel namespace is std.
GNU parallel code for public use.
_OutputIterator __merge_advance(_RAIter1 &__begin1, _RAIter1 __end1, _RAIter2 &__begin2, _RAIter2 __end2, _OutputIterator __target, _DifferenceTp __max_length, _Compare __comp)
Merge routine being able to merge only the __max_length smallest elements.
_UserOp __for_each_template_random_access(_IIter __begin, _IIter __end, _UserOp __user_op, _Functionality &__functionality, _Red __reduction, _Result __reduction_start, _Result &__output, typename std::iterator_traits< _IIter >::difference_type __bound, _Parallelism __parallelism_tag)
Chose the desired algorithm by evaluating __parallelism_tag.
void __parallel_nth_element(_RAIter __begin, _RAIter __nth, _RAIter __end, _Compare __comp)
Parallel implementation of std::nth_element().
_OutputIterator __parallel_unique_copy(_IIter __first, _IIter __last, _OutputIterator __result, _BinaryPredicate __binary_pred)
Parallel std::unique_copy(), w/__o explicit equality predicate.
uint64_t _SequenceIndex
Unsigned integer to index __elements. The total number of elements for each algorithm must fit into t...
void __parallel_random_shuffle(_RAIter __begin, _RAIter __end, _RandomNumberGenerator __rng=_RandomNumber())
Parallel random public call.
_Parallelism
Run-time equivalents for the compile-time tags.
void __sequential_random_shuffle(_RAIter __begin, _RAIter __end, _RandomNumberGenerator &__rng)
Sequential cache-efficient random shuffle.
void __parallel_partial_sort(_RAIter __begin, _RAIter __middle, _RAIter __end, _Compare __comp)
Parallel implementation of std::partial_sort().
std::iterator_traits< _RAIter >::difference_type __parallel_partition(_RAIter __begin, _RAIter __end, _Predicate __pred, _ThreadIndex __num_threads)
Parallel implementation of std::partition.
_RAIter3 __parallel_merge_advance(_RAIter1 &__begin1, _RAIter1 __end1, _RAIter2 &__begin2, _RAIter2 __end2, _RAIter3 __target, typename std::iterator_traits< _RAIter1 >::difference_type __max_length, _Compare __comp)
Merge routine fallback to sequential in case the iterators of the two input sequences are of differen...
__RAIter1 __search_template(__RAIter1 __begin1, __RAIter1 __end1, __RAIter2 __begin2, __RAIter2 __end2, _Pred __pred)
Parallel std::search.
std::pair< _RAIter1, _RAIter2 > __find_template(_RAIter1 __begin1, _RAIter1 __end1, _RAIter2 __begin2, _Pred __pred, _Selector __selector)
Parallel std::find, switch for different algorithms.
Traits class for iterators.
One of the math functors.
One of the comparison functors.
One of the comparison functors.
Random-access iterators support a superset of bidirectional iterator operations.
Functor wrapper for std::rand().
Similar to std::binder2nd, but giving the argument types explicitly.
Similar to std::equal_to, but allows two different types.
Similar to std::less, but allows two different types.
Sequence that conceptually consists of multiple copies of the same element. The copies are not stored...
Test predicate on a single element, used for std::find() and std::find_if ().
Test predicate on two adjacent elements.
Test predicate on several elements.
_It _M_finish_iterator
_Iterator on last element processed; needed for some algorithms (e. g. std::transform()).
std::for_each() selector.
std::generate() selector.
std::transform() __selector, one input sequence variant.
std::transform() __selector, two input sequences variant.
Selector that just returns the passed iterator.
Reduction function doing nothing.
Reduction for finding the maximum element, using a comparator.
Reduction for finding the maximum element, using a comparator.
A pair of iterators. The usual iterator operations are applied to both child iterators.
A triple of iterators. The usual iterator operations are applied to all three child iterators.
static const _Settings & get()
Get the global settings.
Forces sequential execution at compile time.
Recommends parallel execution at compile time, optionally using a user-specified number of threads.
Recommends parallel execution using the default parallel algorithm.
Forces parallel sorting using multiway mergesort at compile time.
Forces parallel sorting using multiway mergesort with exact splitting at compile time.
Forces parallel sorting using multiway mergesort with splitting by sampling at compile time.
Forces parallel sorting using unbalanced quicksort at compile time.
Forces parallel sorting using balanced quicksort at compile time.