37 #ifndef _GLIBCXX_PARALLEL_ALGO_H
38 #define _GLIBCXX_PARALLEL_ALGO_H 1
61 namespace 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); }
74 template<
typename _IIter,
typename _Function,
typename _IteratorTag>
76 __for_each_switch(_IIter __begin, _IIter __end, _Function __f,
81 template<
typename _RAIter,
typename _Function>
83 __for_each_switch(_RAIter __begin, _RAIter __end,
89 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
91 && __gnu_parallel::__is_parallel(__parallelism_tag)))
98 __begin, __end, __f, __functionality,
107 template<
typename _Iterator,
typename _Function>
109 for_each(_Iterator __begin, _Iterator __end, _Function __f,
112 typedef std::iterator_traits<_Iterator> _IteratorTraits;
113 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
114 return __for_each_switch(__begin, __end, __f, _IteratorCategory(),
118 template<
typename _Iterator,
typename _Function>
120 for_each(_Iterator __begin, _Iterator __end, _Function __f)
122 typedef std::iterator_traits<_Iterator> _IteratorTraits;
123 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
124 return __for_each_switch(__begin, __end, __f, _IteratorCategory());
129 template<
typename _IIter,
typename _Tp>
131 find(_IIter __begin, _IIter __end,
const _Tp& __val,
133 {
return _GLIBCXX_STD_A::find(__begin, __end, __val); }
136 template<
typename _IIter,
typename _Tp,
typename _IteratorTag>
138 __find_switch(_IIter __begin, _IIter __end,
const _Tp& __val,
140 {
return _GLIBCXX_STD_A::find(__begin, __end, __val); }
143 template<
typename _RAIter,
typename _Tp>
145 __find_switch(_RAIter __begin, _RAIter __end,
148 typedef iterator_traits<_RAIter> _TraitsType;
149 typedef typename _TraitsType::value_type _ValueType;
155 _ValueType,
const _Tp&,
bool>
158 __begin, __end, __begin, __comp,
162 return _GLIBCXX_STD_A::find(__begin, __end, __val);
166 template<
typename _IIter,
typename _Tp>
168 find(_IIter __begin, _IIter __end,
const _Tp& __val)
170 typedef std::iterator_traits<_IIter> _IteratorTraits;
171 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
172 return __find_switch(__begin, __end, __val, _IteratorCategory());
176 template<
typename _IIter,
typename _Predicate>
178 find_if(_IIter __begin, _IIter __end, _Predicate __pred,
180 {
return _GLIBCXX_STD_A::find_if(__begin, __end, __pred); }
183 template<
typename _IIter,
typename _Predicate,
typename _IteratorTag>
185 __find_if_switch(_IIter __begin, _IIter __end, _Predicate __pred,
187 {
return _GLIBCXX_STD_A::find_if(__begin, __end, __pred); }
190 template<
typename _RAIter,
typename _Predicate>
192 __find_if_switch(_RAIter __begin, _RAIter __end,
198 __find_if_selector()).first;
200 return _GLIBCXX_STD_A::find_if(__begin, __end, __pred);
204 template<
typename _IIter,
typename _Predicate>
206 find_if(_IIter __begin, _IIter __end, _Predicate __pred)
208 typedef std::iterator_traits<_IIter> _IteratorTraits;
209 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
210 return __find_if_switch(__begin, __end, __pred, _IteratorCategory());
214 template<
typename _IIter,
typename _FIterator>
216 find_first_of(_IIter __begin1, _IIter __end1,
217 _FIterator __begin2, _FIterator __end2,
219 {
return _GLIBCXX_STD_A::find_first_of(__begin1, __end1, __begin2, __end2);
223 template<
typename _IIter,
typename _FIterator,
224 typename _BinaryPredicate>
226 find_first_of(_IIter __begin1, _IIter __end1,
227 _FIterator __begin2, _FIterator __end2,
229 {
return _GLIBCXX_STD_A::find_first_of(
230 __begin1, __end1, __begin2, __end2, __comp); }
233 template<
typename _IIter,
typename _FIterator,
234 typename _IteratorTag1,
typename _IteratorTag2>
236 __find_first_of_switch(_IIter __begin1, _IIter __end1,
237 _FIterator __begin2, _FIterator __end2,
238 _IteratorTag1, _IteratorTag2)
239 {
return find_first_of(__begin1, __end1, __begin2, __end2,
243 template<
typename _RAIter,
typename _FIterator,
244 typename _BinaryPredicate,
typename _IteratorTag>
246 __find_first_of_switch(_RAIter __begin1,
248 _FIterator __begin2, _FIterator __end2,
255 <_FIterator>(__begin2, __end2)).first;
259 template<
typename _IIter,
typename _FIterator,
260 typename _BinaryPredicate,
typename _IteratorTag1,
261 typename _IteratorTag2>
263 __find_first_of_switch(_IIter __begin1, _IIter __end1,
264 _FIterator __begin2, _FIterator __end2,
265 _BinaryPredicate __comp, _IteratorTag1, _IteratorTag2)
266 {
return find_first_of(__begin1, __end1, __begin2, __end2, __comp,
270 template<
typename _IIter,
typename _FIterator,
271 typename _BinaryPredicate>
273 find_first_of(_IIter __begin1, _IIter __end1,
274 _FIterator __begin2, _FIterator __end2,
275 _BinaryPredicate __comp)
277 typedef std::iterator_traits<_IIter> _IIterTraits;
278 typedef std::iterator_traits<_FIterator> _FIterTraits;
279 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
280 typedef typename _FIterTraits::iterator_category _FIteratorCategory;
282 return __find_first_of_switch(__begin1, __end1, __begin2, __end2, __comp,
283 _IIteratorCategory(), _FIteratorCategory());
287 template<
typename _IIter,
typename _FIterator>
289 find_first_of(_IIter __begin1, _IIter __end1,
290 _FIterator __begin2, _FIterator __end2)
292 typedef std::iterator_traits<_IIter> _IIterTraits;
293 typedef std::iterator_traits<_FIterator> _FIterTraits;
294 typedef typename _IIterTraits::value_type _IValueType;
295 typedef typename _FIterTraits::value_type _FValueType;
297 return __gnu_parallel::find_first_of(__begin1, __end1, __begin2, __end2,
302 template<
typename _IIter,
typename _OutputIterator>
303 inline _OutputIterator
304 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
306 {
return _GLIBCXX_STD_A::unique_copy(__begin1, __end1, __out); }
309 template<
typename _IIter,
typename _OutputIterator,
311 inline _OutputIterator
312 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
314 {
return _GLIBCXX_STD_A::unique_copy(__begin1, __end1, __out, __pred); }
317 template<
typename _IIter,
typename _OutputIterator,
318 typename _Predicate,
typename _IteratorTag1,
typename _IteratorTag2>
319 inline _OutputIterator
320 __unique_copy_switch(_IIter __begin, _IIter __last,
321 _OutputIterator __out, _Predicate __pred,
322 _IteratorTag1, _IteratorTag2)
323 {
return _GLIBCXX_STD_A::unique_copy(__begin, __last, __out, __pred); }
326 template<
typename _RAIter,
typename RandomAccessOutputIterator,
328 RandomAccessOutputIterator
329 __unique_copy_switch(_RAIter __begin, _RAIter __last,
330 RandomAccessOutputIterator __out, _Predicate __pred,
334 static_cast<__gnu_parallel::_SequenceIndex>(__last - __begin)
337 __begin, __last, __out, __pred);
339 return _GLIBCXX_STD_A::unique_copy(__begin, __last, __out, __pred);
343 template<
typename _IIter,
typename _OutputIterator>
344 inline _OutputIterator
345 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out)
347 typedef std::iterator_traits<_IIter> _IIterTraits;
348 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
349 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
350 typedef typename _IIterTraits::value_type _ValueType;
351 typedef typename _OIterTraits::iterator_category _OIterCategory;
353 return __unique_copy_switch(
355 _IIteratorCategory(), _OIterCategory());
359 template<
typename _IIter,
typename _OutputIterator,
typename _Predicate>
360 inline _OutputIterator
361 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
364 typedef std::iterator_traits<_IIter> _IIterTraits;
365 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
366 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
367 typedef typename _OIterTraits::iterator_category _OIterCategory;
369 return __unique_copy_switch(
370 __begin1, __end1, __out, __pred,
371 _IIteratorCategory(), _OIterCategory());
375 template<
typename _IIter1,
typename _IIter2,
376 typename _OutputIterator>
377 inline _OutputIterator
378 set_union(_IIter1 __begin1, _IIter1 __end1,
379 _IIter2 __begin2, _IIter2 __end2,
381 {
return _GLIBCXX_STD_A::set_union(
382 __begin1, __end1, __begin2, __end2, __out); }
385 template<
typename _IIter1,
typename _IIter2,
386 typename _OutputIterator,
typename _Predicate>
387 inline _OutputIterator
388 set_union(_IIter1 __begin1, _IIter1 __end1,
389 _IIter2 __begin2, _IIter2 __end2,
390 _OutputIterator __out, _Predicate __pred,
392 {
return _GLIBCXX_STD_A::set_union(__begin1, __end1,
393 __begin2, __end2, __out, __pred); }
396 template<
typename _IIter1,
typename _IIter2,
typename _Predicate,
397 typename _OutputIterator,
typename _IteratorTag1,
398 typename _IteratorTag2,
typename _IteratorTag3>
399 inline _OutputIterator
401 _IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _IIter2 __end2,
402 _OutputIterator __result, _Predicate __pred,
403 _IteratorTag1, _IteratorTag2, _IteratorTag3)
404 {
return _GLIBCXX_STD_A::set_union(__begin1, __end1,
405 __begin2, __end2, __result, __pred); }
408 template<
typename _RAIter1,
typename _RAIter2,
409 typename _Output_RAIter,
typename _Predicate>
411 __set_union_switch(_RAIter1 __begin1, _RAIter1 __end1,
412 _RAIter2 __begin2, _RAIter2 __end2,
413 _Output_RAIter __result, _Predicate __pred,
418 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
420 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
422 return __gnu_parallel::__parallel_set_union(
423 __begin1, __end1, __begin2, __end2, __result, __pred);
425 return _GLIBCXX_STD_A::set_union(__begin1, __end1,
426 __begin2, __end2, __result, __pred);
430 template<
typename _IIter1,
typename _IIter2,
431 typename _OutputIterator>
432 inline _OutputIterator
433 set_union(_IIter1 __begin1, _IIter1 __end1,
434 _IIter2 __begin2, _IIter2 __end2, _OutputIterator __out)
436 typedef std::iterator_traits<_IIter1> _IIterTraits1;
437 typedef std::iterator_traits<_IIter2> _IIterTraits2;
438 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
439 typedef typename _IIterTraits1::iterator_category
441 typedef typename _IIterTraits2::iterator_category
443 typedef typename _OIterTraits::iterator_category _OIterCategory;
444 typedef typename _IIterTraits1::value_type _ValueType1;
445 typedef typename _IIterTraits2::value_type _ValueType2;
447 return __set_union_switch(
448 __begin1, __end1, __begin2, __end2, __out,
450 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
454 template<
typename _IIter1,
typename _IIter2,
455 typename _OutputIterator,
typename _Predicate>
456 inline _OutputIterator
457 set_union(_IIter1 __begin1, _IIter1 __end1,
458 _IIter2 __begin2, _IIter2 __end2,
459 _OutputIterator __out, _Predicate __pred)
461 typedef std::iterator_traits<_IIter1> _IIterTraits1;
462 typedef std::iterator_traits<_IIter2> _IIterTraits2;
463 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
464 typedef typename _IIterTraits1::iterator_category
466 typedef typename _IIterTraits2::iterator_category
468 typedef typename _OIterTraits::iterator_category _OIterCategory;
470 return __set_union_switch(
471 __begin1, __end1, __begin2, __end2, __out, __pred,
472 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
476 template<
typename _IIter1,
typename _IIter2,
477 typename _OutputIterator>
478 inline _OutputIterator
479 set_intersection(_IIter1 __begin1, _IIter1 __end1,
480 _IIter2 __begin2, _IIter2 __end2,
482 {
return _GLIBCXX_STD_A::set_intersection(__begin1, __end1,
483 __begin2, __end2, __out); }
486 template<
typename _IIter1,
typename _IIter2,
487 typename _OutputIterator,
typename _Predicate>
488 inline _OutputIterator
489 set_intersection(_IIter1 __begin1, _IIter1 __end1,
490 _IIter2 __begin2, _IIter2 __end2,
491 _OutputIterator __out, _Predicate __pred,
493 {
return _GLIBCXX_STD_A::set_intersection(
494 __begin1, __end1, __begin2, __end2, __out, __pred); }
497 template<
typename _IIter1,
typename _IIter2,
498 typename _Predicate,
typename _OutputIterator,
499 typename _IteratorTag1,
typename _IteratorTag2,
500 typename _IteratorTag3>
501 inline _OutputIterator
502 __set_intersection_switch(_IIter1 __begin1, _IIter1 __end1,
503 _IIter2 __begin2, _IIter2 __end2,
504 _OutputIterator __result, _Predicate __pred,
505 _IteratorTag1, _IteratorTag2, _IteratorTag3)
506 {
return _GLIBCXX_STD_A::set_intersection(__begin1, __end1, __begin2,
507 __end2, __result, __pred); }
510 template<
typename _RAIter1,
typename _RAIter2,
511 typename _Output_RAIter,
typename _Predicate>
513 __set_intersection_switch(_RAIter1 __begin1,
517 _Output_RAIter __result,
524 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
526 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
528 return __gnu_parallel::__parallel_set_intersection(
529 __begin1, __end1, __begin2, __end2, __result, __pred);
531 return _GLIBCXX_STD_A::set_intersection(
532 __begin1, __end1, __begin2, __end2, __result, __pred);
536 template<
typename _IIter1,
typename _IIter2,
537 typename _OutputIterator>
538 inline _OutputIterator
539 set_intersection(_IIter1 __begin1, _IIter1 __end1,
540 _IIter2 __begin2, _IIter2 __end2,
541 _OutputIterator __out)
543 typedef std::iterator_traits<_IIter1> _IIterTraits1;
544 typedef std::iterator_traits<_IIter2> _IIterTraits2;
545 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
546 typedef typename _IIterTraits1::iterator_category
548 typedef typename _IIterTraits2::iterator_category
550 typedef typename _OIterTraits::iterator_category _OIterCategory;
551 typedef typename _IIterTraits1::value_type _ValueType1;
552 typedef typename _IIterTraits2::value_type _ValueType2;
554 return __set_intersection_switch(
555 __begin1, __end1, __begin2, __end2, __out,
557 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
560 template<
typename _IIter1,
typename _IIter2,
561 typename _OutputIterator,
typename _Predicate>
562 inline _OutputIterator
563 set_intersection(_IIter1 __begin1, _IIter1 __end1,
564 _IIter2 __begin2, _IIter2 __end2,
565 _OutputIterator __out, _Predicate __pred)
567 typedef std::iterator_traits<_IIter1> _IIterTraits1;
568 typedef std::iterator_traits<_IIter2> _IIterTraits2;
569 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
570 typedef typename _IIterTraits1::iterator_category
572 typedef typename _IIterTraits2::iterator_category
574 typedef typename _OIterTraits::iterator_category _OIterCategory;
576 return __set_intersection_switch(
577 __begin1, __end1, __begin2, __end2, __out, __pred,
578 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
582 template<
typename _IIter1,
typename _IIter2,
583 typename _OutputIterator>
584 inline _OutputIterator
585 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
586 _IIter2 __begin2, _IIter2 __end2,
587 _OutputIterator __out,
589 {
return _GLIBCXX_STD_A::set_symmetric_difference(
590 __begin1, __end1, __begin2, __end2, __out); }
593 template<
typename _IIter1,
typename _IIter2,
594 typename _OutputIterator,
typename _Predicate>
595 inline _OutputIterator
596 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
597 _IIter2 __begin2, _IIter2 __end2,
598 _OutputIterator __out, _Predicate __pred,
600 {
return _GLIBCXX_STD_A::set_symmetric_difference(
601 __begin1, __end1, __begin2, __end2, __out, __pred); }
604 template<
typename _IIter1,
typename _IIter2,
605 typename _Predicate,
typename _OutputIterator,
606 typename _IteratorTag1,
typename _IteratorTag2,
607 typename _IteratorTag3>
608 inline _OutputIterator
609 __set_symmetric_difference_switch(
610 _IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _IIter2 __end2,
611 _OutputIterator __result, _Predicate __pred,
612 _IteratorTag1, _IteratorTag2, _IteratorTag3)
613 {
return _GLIBCXX_STD_A::set_symmetric_difference(
614 __begin1, __end1, __begin2, __end2, __result, __pred); }
617 template<
typename _RAIter1,
typename _RAIter2,
618 typename _Output_RAIter,
typename _Predicate>
620 __set_symmetric_difference_switch(_RAIter1 __begin1,
624 _Output_RAIter __result,
631 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
633 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
635 return __gnu_parallel::__parallel_set_symmetric_difference(
636 __begin1, __end1, __begin2, __end2, __result, __pred);
638 return _GLIBCXX_STD_A::set_symmetric_difference(
639 __begin1, __end1, __begin2, __end2, __result, __pred);
643 template<
typename _IIter1,
typename _IIter2,
644 typename _OutputIterator>
645 inline _OutputIterator
646 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
647 _IIter2 __begin2, _IIter2 __end2,
648 _OutputIterator __out)
650 typedef std::iterator_traits<_IIter1> _IIterTraits1;
651 typedef std::iterator_traits<_IIter2> _IIterTraits2;
652 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
653 typedef typename _IIterTraits1::iterator_category
655 typedef typename _IIterTraits2::iterator_category
657 typedef typename _OIterTraits::iterator_category _OIterCategory;
658 typedef typename _IIterTraits1::value_type _ValueType1;
659 typedef typename _IIterTraits2::value_type _ValueType2;
661 return __set_symmetric_difference_switch(
662 __begin1, __end1, __begin2, __end2, __out,
664 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
668 template<
typename _IIter1,
typename _IIter2,
669 typename _OutputIterator,
typename _Predicate>
670 inline _OutputIterator
671 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
672 _IIter2 __begin2, _IIter2 __end2,
673 _OutputIterator __out, _Predicate __pred)
675 typedef std::iterator_traits<_IIter1> _IIterTraits1;
676 typedef std::iterator_traits<_IIter2> _IIterTraits2;
677 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
678 typedef typename _IIterTraits1::iterator_category
680 typedef typename _IIterTraits2::iterator_category
682 typedef typename _OIterTraits::iterator_category _OIterCategory;
684 return __set_symmetric_difference_switch(
685 __begin1, __end1, __begin2, __end2, __out, __pred,
686 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
690 template<
typename _IIter1,
typename _IIter2,
691 typename _OutputIterator>
692 inline _OutputIterator
693 set_difference(_IIter1 __begin1, _IIter1 __end1,
694 _IIter2 __begin2, _IIter2 __end2,
696 {
return _GLIBCXX_STD_A::set_difference(
697 __begin1,__end1, __begin2, __end2, __out); }
700 template<
typename _IIter1,
typename _IIter2,
701 typename _OutputIterator,
typename _Predicate>
702 inline _OutputIterator
703 set_difference(_IIter1 __begin1, _IIter1 __end1,
704 _IIter2 __begin2, _IIter2 __end2,
705 _OutputIterator __out, _Predicate __pred,
707 {
return _GLIBCXX_STD_A::set_difference(__begin1, __end1,
708 __begin2, __end2, __out, __pred); }
711 template<
typename _IIter1,
typename _IIter2,
typename _Predicate,
712 typename _OutputIterator,
typename _IteratorTag1,
713 typename _IteratorTag2,
typename _IteratorTag3>
714 inline _OutputIterator
715 __set_difference_switch(_IIter1 __begin1, _IIter1 __end1,
716 _IIter2 __begin2, _IIter2 __end2,
717 _OutputIterator __result, _Predicate __pred,
718 _IteratorTag1, _IteratorTag2, _IteratorTag3)
719 {
return _GLIBCXX_STD_A::set_difference(
720 __begin1, __end1, __begin2, __end2, __result, __pred); }
723 template<
typename _RAIter1,
typename _RAIter2,
724 typename _Output_RAIter,
typename _Predicate>
726 __set_difference_switch(_RAIter1 __begin1,
730 _Output_RAIter __result, _Predicate __pred,
736 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
738 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
740 return __gnu_parallel::__parallel_set_difference(
741 __begin1, __end1, __begin2, __end2, __result, __pred);
743 return _GLIBCXX_STD_A::set_difference(
744 __begin1, __end1, __begin2, __end2, __result, __pred);
748 template<
typename _IIter1,
typename _IIter2,
749 typename _OutputIterator>
750 inline _OutputIterator
751 set_difference(_IIter1 __begin1, _IIter1 __end1,
752 _IIter2 __begin2, _IIter2 __end2,
753 _OutputIterator __out)
755 typedef std::iterator_traits<_IIter1> _IIterTraits1;
756 typedef std::iterator_traits<_IIter2> _IIterTraits2;
757 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
758 typedef typename _IIterTraits1::iterator_category
760 typedef typename _IIterTraits2::iterator_category
762 typedef typename _OIterTraits::iterator_category _OIterCategory;
763 typedef typename _IIterTraits1::value_type _ValueType1;
764 typedef typename _IIterTraits2::value_type _ValueType2;
766 return __set_difference_switch(
767 __begin1, __end1, __begin2, __end2, __out,
769 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
773 template<
typename _IIter1,
typename _IIter2,
774 typename _OutputIterator,
typename _Predicate>
775 inline _OutputIterator
776 set_difference(_IIter1 __begin1, _IIter1 __end1,
777 _IIter2 __begin2, _IIter2 __end2,
778 _OutputIterator __out, _Predicate __pred)
780 typedef std::iterator_traits<_IIter1> _IIterTraits1;
781 typedef std::iterator_traits<_IIter2> _IIterTraits2;
782 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
783 typedef typename _IIterTraits1::iterator_category
785 typedef typename _IIterTraits2::iterator_category
787 typedef typename _OIterTraits::iterator_category _OIterCategory;
789 return __set_difference_switch(
790 __begin1, __end1, __begin2, __end2, __out, __pred,
791 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
795 template<
typename _FIterator>
797 adjacent_find(_FIterator __begin, _FIterator __end,
799 {
return _GLIBCXX_STD_A::adjacent_find(__begin, __end); }
802 template<
typename _FIterator,
typename _BinaryPredicate>
804 adjacent_find(_FIterator __begin, _FIterator __end,
805 _BinaryPredicate __binary_pred,
807 {
return _GLIBCXX_STD_A::adjacent_find(__begin, __end, __binary_pred); }
810 template<
typename _RAIter>
812 __adjacent_find_switch(_RAIter __begin, _RAIter __end,
815 typedef iterator_traits<_RAIter> _TraitsType;
816 typedef typename _TraitsType::value_type _ValueType;
825 if (__spot == (__end - 1))
835 template<
typename _FIterator,
typename _IteratorTag>
837 __adjacent_find_switch(_FIterator __begin, _FIterator __end,
842 template<
typename _FIterator>
844 adjacent_find(_FIterator __begin, _FIterator __end)
846 typedef iterator_traits<_FIterator> _TraitsType;
847 typedef typename _TraitsType::iterator_category _IteratorCategory;
848 return __adjacent_find_switch(__begin, __end, _IteratorCategory());
852 template<
typename _FIterator,
typename _BinaryPredicate,
853 typename _IteratorTag>
855 __adjacent_find_switch(_FIterator __begin, _FIterator __end,
856 _BinaryPredicate __pred, _IteratorTag)
857 {
return adjacent_find(__begin, __end, __pred,
861 template<
typename _RAIter,
typename _BinaryPredicate>
863 __adjacent_find_switch(_RAIter __begin, _RAIter __end,
869 __adjacent_find_selector()).first;
871 return adjacent_find(__begin, __end, __pred,
876 template<
typename _FIterator,
typename _BinaryPredicate>
878 adjacent_find(_FIterator __begin, _FIterator __end,
879 _BinaryPredicate __pred)
881 typedef iterator_traits<_FIterator> _TraitsType;
882 typedef typename _TraitsType::iterator_category _IteratorCategory;
883 return __adjacent_find_switch(__begin, __end, __pred,
884 _IteratorCategory());
888 template<
typename _IIter,
typename _Tp>
889 inline typename iterator_traits<_IIter>::difference_type
890 count(_IIter __begin, _IIter __end,
const _Tp& __value,
892 {
return _GLIBCXX_STD_A::count(__begin, __end, __value); }
895 template<
typename _RAIter,
typename _Tp>
896 typename iterator_traits<_RAIter>::difference_type
897 __count_switch(_RAIter __begin, _RAIter __end,
902 typedef iterator_traits<_RAIter> _TraitsType;
903 typedef typename _TraitsType::value_type _ValueType;
904 typedef typename _TraitsType::difference_type _DifferenceType;
908 static_cast<_SequenceIndex>(__end - __begin)
910 && __gnu_parallel::__is_parallel(__parallelism_tag)))
914 _DifferenceType __res = 0;
917 __begin, __end, __value, __functionality,
923 return count(__begin, __end, __value,
928 template<
typename _IIter,
typename _Tp,
typename _IteratorTag>
929 inline typename iterator_traits<_IIter>::difference_type
930 __count_switch(_IIter __begin, _IIter __end,
const _Tp& __value,
936 template<
typename _IIter,
typename _Tp>
937 inline typename iterator_traits<_IIter>::difference_type
938 count(_IIter __begin, _IIter __end,
const _Tp& __value,
941 typedef iterator_traits<_IIter> _TraitsType;
942 typedef typename _TraitsType::iterator_category _IteratorCategory;
943 return __count_switch(__begin, __end, __value, _IteratorCategory(),
947 template<
typename _IIter,
typename _Tp>
948 inline typename iterator_traits<_IIter>::difference_type
949 count(_IIter __begin, _IIter __end,
const _Tp& __value)
951 typedef iterator_traits<_IIter> _TraitsType;
952 typedef typename _TraitsType::iterator_category _IteratorCategory;
953 return __count_switch(__begin, __end, __value, _IteratorCategory());
958 template<
typename _IIter,
typename _Predicate>
959 inline typename iterator_traits<_IIter>::difference_type
960 count_if(_IIter __begin, _IIter __end, _Predicate __pred,
962 {
return _GLIBCXX_STD_A::count_if(__begin, __end, __pred); }
965 template<
typename _RAIter,
typename _Predicate>
966 typename iterator_traits<_RAIter>::difference_type
967 __count_if_switch(_RAIter __begin, _RAIter __end,
972 typedef iterator_traits<_RAIter> _TraitsType;
973 typedef typename _TraitsType::value_type _ValueType;
974 typedef typename _TraitsType::difference_type _DifferenceType;
978 static_cast<_SequenceIndex>(__end - __begin)
980 && __gnu_parallel::__is_parallel(__parallelism_tag)))
982 _DifferenceType __res = 0;
988 __begin, __end, __pred, __functionality,
994 return count_if(__begin, __end, __pred,
999 template<
typename _IIter,
typename _Predicate,
typename _IteratorTag>
1000 inline typename iterator_traits<_IIter>::difference_type
1001 __count_if_switch(_IIter __begin, _IIter __end, _Predicate __pred,
1003 {
return count_if(__begin, __end, __pred,
1007 template<
typename _IIter,
typename _Predicate>
1008 inline typename iterator_traits<_IIter>::difference_type
1009 count_if(_IIter __begin, _IIter __end, _Predicate __pred,
1012 typedef iterator_traits<_IIter> _TraitsType;
1013 typedef typename _TraitsType::iterator_category _IteratorCategory;
1014 return __count_if_switch(__begin, __end, __pred, _IteratorCategory(),
1018 template<
typename _IIter,
typename _Predicate>
1019 inline typename iterator_traits<_IIter>::difference_type
1020 count_if(_IIter __begin, _IIter __end, _Predicate __pred)
1022 typedef iterator_traits<_IIter> _TraitsType;
1023 typedef typename _TraitsType::iterator_category _IteratorCategory;
1024 return __count_if_switch(__begin, __end, __pred, _IteratorCategory());
1029 template<
typename _FIterator1,
typename _FIterator2>
1031 search(_FIterator1 __begin1, _FIterator1 __end1,
1032 _FIterator2 __begin2, _FIterator2 __end2,
1034 {
return _GLIBCXX_STD_A::search(__begin1, __end1, __begin2, __end2); }
1037 template<
typename _RAIter1,
typename _RAIter2>
1039 __search_switch(_RAIter1 __begin1, _RAIter1 __end1,
1040 _RAIter2 __begin2, _RAIter2 __end2,
1043 typedef std::iterator_traits<_RAIter1> _Iterator1Traits;
1044 typedef typename _Iterator1Traits::value_type _ValueType1;
1045 typedef std::iterator_traits<_RAIter2> _Iterator2Traits;
1046 typedef typename _Iterator2Traits::value_type _ValueType2;
1049 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
1053 __begin1, __end1, __begin2, __end2,
1056 return search(__begin1, __end1, __begin2, __end2,
1061 template<
typename _FIterator1,
typename _FIterator2,
1062 typename _IteratorTag1,
typename _IteratorTag2>
1064 __search_switch(_FIterator1 __begin1, _FIterator1 __end1,
1065 _FIterator2 __begin2, _FIterator2 __end2,
1066 _IteratorTag1, _IteratorTag2)
1067 {
return search(__begin1, __end1, __begin2, __end2,
1071 template<
typename _FIterator1,
typename _FIterator2>
1073 search(_FIterator1 __begin1, _FIterator1 __end1,
1074 _FIterator2 __begin2, _FIterator2 __end2)
1076 typedef std::iterator_traits<_FIterator1> _Iterator1Traits;
1077 typedef typename _Iterator1Traits::iterator_category _IteratorCategory1;
1078 typedef std::iterator_traits<_FIterator2> _Iterator2Traits;
1079 typedef typename _Iterator2Traits::iterator_category _IteratorCategory2;
1081 return __search_switch(__begin1, __end1, __begin2, __end2,
1082 _IteratorCategory1(), _IteratorCategory2());
1086 template<
typename _FIterator1,
typename _FIterator2,
1087 typename _BinaryPredicate>
1089 search(_FIterator1 __begin1, _FIterator1 __end1,
1090 _FIterator2 __begin2, _FIterator2 __end2,
1092 {
return _GLIBCXX_STD_A::search(
1093 __begin1, __end1, __begin2, __end2, __pred); }
1096 template<
typename _RAIter1,
typename _RAIter2,
1097 typename _BinaryPredicate>
1099 __search_switch(_RAIter1 __begin1, _RAIter1 __end1,
1100 _RAIter2 __begin2, _RAIter2 __end2,
1101 _BinaryPredicate __pred,
1105 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
1108 __begin2, __end2, __pred);
1110 return search(__begin1, __end1, __begin2, __end2, __pred,
1115 template<
typename _FIterator1,
typename _FIterator2,
1116 typename _BinaryPredicate,
typename _IteratorTag1,
1117 typename _IteratorTag2>
1119 __search_switch(_FIterator1 __begin1, _FIterator1 __end1,
1120 _FIterator2 __begin2, _FIterator2 __end2,
1121 _BinaryPredicate __pred, _IteratorTag1, _IteratorTag2)
1122 {
return search(__begin1, __end1, __begin2, __end2, __pred,
1126 template<
typename _FIterator1,
typename _FIterator2,
1127 typename _BinaryPredicate>
1129 search(_FIterator1 __begin1, _FIterator1 __end1,
1130 _FIterator2 __begin2, _FIterator2 __end2,
1131 _BinaryPredicate __pred)
1133 typedef std::iterator_traits<_FIterator1> _Iterator1Traits;
1134 typedef typename _Iterator1Traits::iterator_category _IteratorCategory1;
1135 typedef std::iterator_traits<_FIterator2> _Iterator2Traits;
1136 typedef typename _Iterator2Traits::iterator_category _IteratorCategory2;
1137 return __search_switch(__begin1, __end1, __begin2, __end2, __pred,
1138 _IteratorCategory1(), _IteratorCategory2());
1142 template<
typename _FIterator,
typename _Integer,
typename _Tp>
1144 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1146 {
return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val); }
1149 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1150 typename _BinaryPredicate>
1152 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1153 const _Tp& __val, _BinaryPredicate __binary_pred,
1155 {
return _GLIBCXX_STD_A::search_n(
1156 __begin, __end, __count, __val, __binary_pred); }
1159 template<
typename _FIterator,
typename _Integer,
typename _Tp>
1161 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1164 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
1165 return __gnu_parallel::search_n(__begin, __end, __count, __val,
1170 template<
typename _RAIter,
typename _Integer,
1171 typename _Tp,
typename _BinaryPredicate>
1173 __search_n_switch(_RAIter __begin, _RAIter __end, _Integer __count,
1174 const _Tp& __val, _BinaryPredicate __binary_pred,
1178 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1183 __begin, __end, __ps.
begin(), __ps.
end(), __binary_pred);
1186 return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
1191 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1192 typename _BinaryPredicate,
typename _IteratorTag>
1194 __search_n_switch(_FIterator __begin, _FIterator __end, _Integer __count,
1195 const _Tp& __val, _BinaryPredicate __binary_pred,
1197 {
return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
1201 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1202 typename _BinaryPredicate>
1204 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1205 const _Tp& __val, _BinaryPredicate __binary_pred)
1207 return __search_n_switch(__begin, __end, __count, __val, __binary_pred,
1208 typename std::iterator_traits<_FIterator>::
1209 iterator_category());
1214 template<
typename _IIter,
typename _OutputIterator,
1215 typename _UnaryOperation>
1216 inline _OutputIterator
1217 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1219 {
return _GLIBCXX_STD_A::transform(__begin, __end, __result, __unary_op); }
1222 template<
typename _RAIter1,
typename _RAIter2,
1223 typename _UnaryOperation>
1225 __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
1226 _RAIter2 __result, _UnaryOperation __unary_op,
1232 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1234 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1236 bool __dummy =
true;
1239 _ItTrip __begin_pair(__begin, __result),
1240 __end_pair(__end, __result + (__end - __begin));
1244 __begin_pair, __end_pair, __unary_op, __functionality,
1246 __dummy, __dummy, -1, __parallelism_tag);
1250 return transform(__begin, __end, __result, __unary_op,
1255 template<
typename _RAIter1,
typename _RAIter2,
1256 typename _UnaryOperation,
typename _IteratorTag1,
1257 typename _IteratorTag2>
1259 __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
1260 _RAIter2 __result, _UnaryOperation __unary_op,
1261 _IteratorTag1, _IteratorTag2)
1262 {
return transform(__begin, __end, __result, __unary_op,
1266 template<
typename _IIter,
typename _OutputIterator,
1267 typename _UnaryOperation>
1268 inline _OutputIterator
1269 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1270 _UnaryOperation __unary_op,
1273 typedef std::iterator_traits<_IIter> _IIterTraits;
1274 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
1275 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
1276 typedef typename _OIterTraits::iterator_category _OIterCategory;
1278 return __transform1_switch(__begin, __end, __result, __unary_op,
1279 _IIteratorCategory(), _OIterCategory(),
1283 template<
typename _IIter,
typename _OutputIterator,
1284 typename _UnaryOperation>
1285 inline _OutputIterator
1286 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1287 _UnaryOperation __unary_op)
1289 typedef std::iterator_traits<_IIter> _IIterTraits;
1290 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
1291 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
1292 typedef typename _OIterTraits::iterator_category _OIterCategory;
1294 return __transform1_switch(__begin, __end, __result, __unary_op,
1295 _IIteratorCategory(), _OIterCategory());
1300 template<
typename _IIter1,
typename _IIter2,
1301 typename _OutputIterator,
typename _BinaryOperation>
1302 inline _OutputIterator
1303 transform(_IIter1 __begin1, _IIter1 __end1,
1304 _IIter2 __begin2, _OutputIterator __result,
1306 {
return _GLIBCXX_STD_A::transform(__begin1, __end1,
1307 __begin2, __result, __binary_op); }
1310 template<
typename _RAIter1,
typename _RAIter2,
1311 typename _RAIter3,
typename _BinaryOperation>
1313 __transform2_switch(_RAIter1 __begin1, _RAIter1 __end1,
1315 _RAIter3 __result, _BinaryOperation __binary_op,
1322 (__end1 - __begin1) >=
1324 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1326 bool __dummy =
true;
1330 _ItTrip __begin_triple(__begin1, __begin2, __result),
1331 __end_triple(__end1, __begin2 + (__end1 - __begin1),
1332 __result + (__end1 - __begin1));
1336 __binary_op, __functionality,
1338 __dummy, __dummy, -1,
1343 return transform(__begin1, __end1, __begin2, __result, __binary_op,
1348 template<
typename _IIter1,
typename _IIter2,
1349 typename _OutputIterator,
typename _BinaryOperation,
1350 typename _Tag1,
typename _Tag2,
typename _Tag3>
1351 inline _OutputIterator
1352 __transform2_switch(_IIter1 __begin1, _IIter1 __end1,
1353 _IIter2 __begin2, _OutputIterator __result,
1354 _BinaryOperation __binary_op, _Tag1, _Tag2, _Tag3)
1355 {
return transform(__begin1, __end1, __begin2, __result, __binary_op,
1359 template<
typename _IIter1,
typename _IIter2,
1360 typename _OutputIterator,
typename _BinaryOperation>
1361 inline _OutputIterator
1362 transform(_IIter1 __begin1, _IIter1 __end1,
1363 _IIter2 __begin2, _OutputIterator __result,
1364 _BinaryOperation __binary_op,
1367 typedef std::iterator_traits<_IIter1> _IIterTraits1;
1368 typedef typename _IIterTraits1::iterator_category
1370 typedef std::iterator_traits<_IIter2> _IIterTraits2;
1371 typedef typename _IIterTraits2::iterator_category
1373 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
1374 typedef typename _OIterTraits::iterator_category _OIterCategory;
1376 return __transform2_switch(
1377 __begin1, __end1, __begin2, __result, __binary_op,
1378 _IIterCategory1(), _IIterCategory2(), _OIterCategory(),
1382 template<
typename _IIter1,
typename _IIter2,
1383 typename _OutputIterator,
typename _BinaryOperation>
1384 inline _OutputIterator
1385 transform(_IIter1 __begin1, _IIter1 __end1,
1386 _IIter2 __begin2, _OutputIterator __result,
1387 _BinaryOperation __binary_op)
1389 typedef std::iterator_traits<_IIter1> _IIterTraits1;
1390 typedef typename _IIterTraits1::iterator_category
1392 typedef std::iterator_traits<_IIter2> _IIterTraits2;
1393 typedef typename _IIterTraits2::iterator_category
1395 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
1396 typedef typename _OIterTraits::iterator_category _OIterCategory;
1398 return __transform2_switch(
1399 __begin1, __end1, __begin2, __result, __binary_op,
1400 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
1404 template<
typename _FIterator,
typename _Tp>
1406 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1408 { _GLIBCXX_STD_A::replace(__begin, __end, __old_value, __new_value); }
1411 template<
typename _FIterator,
typename _Tp,
typename _IteratorTag>
1413 __replace_switch(_FIterator __begin, _FIterator __end,
1414 const _Tp& __old_value,
const _Tp& __new_value,
1416 { replace(__begin, __end, __old_value, __new_value,
1420 template<
typename _RAIter,
typename _Tp>
1422 __replace_switch(_RAIter __begin, _RAIter __end,
1423 const _Tp& __old_value,
const _Tp& __new_value,
1429 replace(__begin, __end, __old_value, __new_value,
1434 template<
typename _FIterator,
typename _Tp>
1436 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1437 const _Tp& __new_value,
1440 typedef iterator_traits<_FIterator> _TraitsType;
1441 typedef typename _TraitsType::iterator_category _IteratorCategory;
1442 __replace_switch(__begin, __end, __old_value, __new_value,
1443 _IteratorCategory(),
1447 template<
typename _FIterator,
typename _Tp>
1449 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1450 const _Tp& __new_value)
1452 typedef iterator_traits<_FIterator> _TraitsType;
1453 typedef typename _TraitsType::iterator_category _IteratorCategory;
1454 __replace_switch(__begin, __end, __old_value, __new_value,
1455 _IteratorCategory());
1460 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1462 replace_if(_FIterator __begin, _FIterator __end, _Predicate __pred,
1464 { _GLIBCXX_STD_A::replace_if(__begin, __end, __pred, __new_value); }
1467 template<
typename _FIterator,
typename _Predicate,
typename _Tp,
1468 typename _IteratorTag>
1470 __replace_if_switch(_FIterator __begin, _FIterator __end,
1471 _Predicate __pred,
const _Tp& __new_value, _IteratorTag)
1472 { replace_if(__begin, __end, __pred, __new_value,
1476 template<
typename _RAIter,
typename _Predicate,
typename _Tp>
1478 __replace_if_switch(_RAIter __begin, _RAIter __end,
1479 _Predicate __pred,
const _Tp& __new_value,
1485 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1487 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1492 __functionality(__new_value);
1495 __begin, __end, __pred, __functionality,
1497 true, __dummy, -1, __parallelism_tag);
1500 replace_if(__begin, __end, __pred, __new_value,
1505 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1507 replace_if(_FIterator __begin, _FIterator __end,
1508 _Predicate __pred,
const _Tp& __new_value,
1511 typedef std::iterator_traits<_FIterator> _IteratorTraits;
1512 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1513 __replace_if_switch(__begin, __end, __pred, __new_value,
1514 _IteratorCategory(), __parallelism_tag);
1517 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1519 replace_if(_FIterator __begin, _FIterator __end,
1520 _Predicate __pred,
const _Tp& __new_value)
1522 typedef std::iterator_traits<_FIterator> _IteratorTraits;
1523 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1524 __replace_if_switch(__begin, __end, __pred, __new_value,
1525 _IteratorCategory());
1529 template<
typename _FIterator,
typename _Generator>
1531 generate(_FIterator __begin, _FIterator __end, _Generator __gen,
1533 { _GLIBCXX_STD_A::generate(__begin, __end, __gen); }
1536 template<
typename _FIterator,
typename _Generator,
typename _IteratorTag>
1538 __generate_switch(_FIterator __begin, _FIterator __end, _Generator __gen,
1543 template<
typename _RAIter,
typename _Generator>
1545 __generate_switch(_RAIter __begin, _RAIter __end,
1551 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1553 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1560 __begin, __end, __gen, __functionality,
1562 true, __dummy, -1, __parallelism_tag);
1569 template<
typename _FIterator,
typename _Generator>
1571 generate(_FIterator __begin, _FIterator __end,
1574 typedef std::iterator_traits<_FIterator> _IteratorTraits;
1575 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1576 __generate_switch(__begin, __end, __gen, _IteratorCategory(),
1580 template<
typename _FIterator,
typename _Generator>
1582 generate(_FIterator __begin, _FIterator __end, _Generator __gen)
1584 typedef std::iterator_traits<_FIterator> _IteratorTraits;
1585 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1586 __generate_switch(__begin, __end, __gen, _IteratorCategory());
1591 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1592 inline _OutputIterator
1593 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen,
1595 {
return _GLIBCXX_STD_A::generate_n(__begin, __n, __gen); }
1598 template<
typename _OutputIterator,
typename _Size,
typename _Generator,
1599 typename _IteratorTag>
1600 inline _OutputIterator
1601 __generate_n_switch(_OutputIterator __begin, _Size __n, _Generator __gen,
1603 {
return generate_n(__begin, __n, __gen,
1607 template<
typename _RAIter,
typename _Size,
typename _Generator>
1609 __generate_n_switch(_RAIter __begin, _Size __n, _Generator __gen,
1619 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1620 inline _OutputIterator
1621 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen,
1624 typedef std::iterator_traits<_OutputIterator> _IteratorTraits;
1625 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1626 return __generate_n_switch(__begin, __n, __gen, _IteratorCategory(),
1630 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1631 inline _OutputIterator
1632 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen)
1634 typedef std::iterator_traits<_OutputIterator> _IteratorTraits;
1635 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1636 return __generate_n_switch(__begin, __n, __gen, _IteratorCategory());
1641 template<
typename _RAIter>
1643 random_shuffle(_RAIter __begin, _RAIter __end,
1645 { _GLIBCXX_STD_A::random_shuffle(__begin, __end); }
1648 template<
typename _RAIter,
typename _RandomNumberGenerator>
1650 random_shuffle(_RAIter __begin, _RAIter __end,
1651 _RandomNumberGenerator& __rand,
1653 { _GLIBCXX_STD_A::random_shuffle(__begin, __end, __rand); }
1657 template<
typename _MustBeInt =
int>
1661 operator()(
int __limit)
1662 {
return rand() % __limit; }
1666 template<
typename _RAIter>
1668 random_shuffle(_RAIter __begin, _RAIter __end)
1672 __gnu_parallel::random_shuffle(__begin, __end, __r);
1676 template<
typename _RAIter,
typename _RandomNumberGenerator>
1678 random_shuffle(_RAIter __begin, _RAIter __end,
1679 #
if __cplusplus >= 201103L
1680 _RandomNumberGenerator&& __rand)
1682 _RandomNumberGenerator& __rand)
1685 if (__begin == __end)
1688 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1696 template<
typename _FIterator,
typename _Predicate>
1698 partition(_FIterator __begin, _FIterator __end,
1700 {
return _GLIBCXX_STD_A::partition(__begin, __end, __pred); }
1703 template<
typename _FIterator,
typename _Predicate,
typename _IteratorTag>
1705 __partition_switch(_FIterator __begin, _FIterator __end,
1706 _Predicate __pred, _IteratorTag)
1707 {
return partition(__begin, __end, __pred,
1711 template<
typename _RAIter,
typename _Predicate>
1713 __partition_switch(_RAIter __begin, _RAIter __end,
1714 _Predicate __pred, random_access_iterator_tag)
1717 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1720 typedef typename std::iterator_traits<_RAIter>::
1721 difference_type _DifferenceType;
1724 __gnu_parallel::__get_max_threads());
1725 return __begin + __middle;
1728 return partition(__begin, __end, __pred,
1733 template<
typename _FIterator,
typename _Predicate>
1735 partition(_FIterator __begin, _FIterator __end, _Predicate __pred)
1737 typedef iterator_traits<_FIterator> _TraitsType;
1738 typedef typename _TraitsType::iterator_category _IteratorCategory;
1739 return __partition_switch(__begin, __end, __pred, _IteratorCategory());
1745 template<
typename _RAIter>
1747 sort(_RAIter __begin, _RAIter __end,
1749 { _GLIBCXX_STD_A::sort(__begin, __end); }
1752 template<
typename _RAIter,
typename _Compare>
1754 sort(_RAIter __begin, _RAIter __end, _Compare __comp,
1756 { _GLIBCXX_STD_A::sort<_RAIter, _Compare>(__begin, __end,
1760 template<
typename _RAIter,
typename _Compare,
1763 sort(_RAIter __begin, _RAIter __end, _Compare __comp,
1766 typedef iterator_traits<_RAIter> _TraitsType;
1767 typedef typename _TraitsType::value_type _ValueType;
1769 if (__begin != __end)
1772 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin) >=
1774 __gnu_parallel::__parallel_sort<false>(
1775 __begin, __end, __comp, __parallelism);
1782 template<
typename _RAIter>
1784 sort(_RAIter __begin, _RAIter __end)
1786 typedef iterator_traits<_RAIter> _TraitsType;
1787 typedef typename _TraitsType::value_type _ValueType;
1793 template<
typename _RAIter>
1795 sort(_RAIter __begin, _RAIter __end,
1798 typedef iterator_traits<_RAIter> _TraitsType;
1799 typedef typename _TraitsType::value_type _ValueType;
1804 template<
typename _RAIter>
1806 sort(_RAIter __begin, _RAIter __end,
1809 typedef iterator_traits<_RAIter> _TraitsType;
1810 typedef typename _TraitsType::value_type _ValueType;
1815 template<
typename _RAIter>
1817 sort(_RAIter __begin, _RAIter __end,
1820 typedef iterator_traits<_RAIter> _TraitsType;
1821 typedef typename _TraitsType::value_type _ValueType;
1826 template<
typename _RAIter>
1828 sort(_RAIter __begin, _RAIter __end,
1831 typedef iterator_traits<_RAIter> _TraitsType;
1832 typedef typename _TraitsType::value_type _ValueType;
1837 template<
typename _RAIter>
1839 sort(_RAIter __begin, _RAIter __end,
1842 typedef iterator_traits<_RAIter> _TraitsType;
1843 typedef typename _TraitsType::value_type _ValueType;
1848 template<
typename _RAIter>
1850 sort(_RAIter __begin, _RAIter __end,
1853 typedef iterator_traits<_RAIter> _TraitsType;
1854 typedef typename _TraitsType::value_type _ValueType;
1859 template<
typename _RAIter>
1861 sort(_RAIter __begin, _RAIter __end,
1864 typedef iterator_traits<_RAIter> _TraitsType;
1865 typedef typename _TraitsType::value_type _ValueType;
1870 template<
typename _RAIter,
typename _Compare>
1872 sort(_RAIter __begin, _RAIter __end, _Compare __comp)
1874 typedef iterator_traits<_RAIter> _TraitsType;
1875 typedef typename _TraitsType::value_type _ValueType;
1884 template<
typename _RAIter>
1886 stable_sort(_RAIter __begin, _RAIter __end,
1888 { _GLIBCXX_STD_A::stable_sort(__begin, __end); }
1891 template<
typename _RAIter,
typename _Compare>
1893 stable_sort(_RAIter __begin, _RAIter __end,
1895 { _GLIBCXX_STD_A::stable_sort<_RAIter, _Compare>(
1896 __begin, __end, __comp); }
1899 template<
typename _RAIter,
typename _Compare,
1902 stable_sort(_RAIter __begin, _RAIter __end,
1905 typedef iterator_traits<_RAIter> _TraitsType;
1906 typedef typename _TraitsType::value_type _ValueType;
1908 if (__begin != __end)
1911 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin) >=
1913 __gnu_parallel::__parallel_sort<true>(
1914 __begin, __end, __comp, __parallelism);
1916 stable_sort(__begin, __end, __comp,
1922 template<
typename _RAIter>
1924 stable_sort(_RAIter __begin, _RAIter __end)
1926 typedef iterator_traits<_RAIter> _TraitsType;
1927 typedef typename _TraitsType::value_type _ValueType;
1933 template<
typename _RAIter>
1935 stable_sort(_RAIter __begin, _RAIter __end,
1938 typedef iterator_traits<_RAIter> _TraitsType;
1939 typedef typename _TraitsType::value_type _ValueType;
1944 template<
typename _RAIter>
1946 stable_sort(_RAIter __begin, _RAIter __end,
1949 typedef iterator_traits<_RAIter> _TraitsType;
1950 typedef typename _TraitsType::value_type _ValueType;
1955 template<
typename _RAIter>
1957 stable_sort(_RAIter __begin, _RAIter __end,
1960 typedef iterator_traits<_RAIter> _TraitsType;
1961 typedef typename _TraitsType::value_type _ValueType;
1966 template<
typename _RAIter>
1968 stable_sort(_RAIter __begin, _RAIter __end,
1971 typedef iterator_traits<_RAIter> _TraitsType;
1972 typedef typename _TraitsType::value_type _ValueType;
1977 template<
typename _RAIter>
1979 stable_sort(_RAIter __begin, _RAIter __end,
1982 typedef iterator_traits<_RAIter> _TraitsType;
1983 typedef typename _TraitsType::value_type _ValueType;
1988 template<
typename _RAIter,
typename _Compare>
1990 stable_sort(_RAIter __begin, _RAIter __end,
1993 typedef iterator_traits<_RAIter> _TraitsType;
1994 typedef typename _TraitsType::value_type _ValueType;
2000 template<
typename _IIter1,
typename _IIter2,
2001 typename _OutputIterator>
2002 inline _OutputIterator
2003 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
2004 _IIter2 __end2, _OutputIterator __result,
2006 {
return _GLIBCXX_STD_A::merge(
2007 __begin1, __end1, __begin2, __end2, __result); }
2010 template<
typename _IIter1,
typename _IIter2,
2011 typename _OutputIterator,
typename _Compare>
2012 inline _OutputIterator
2013 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
2014 _IIter2 __end2, _OutputIterator __result, _Compare __comp,
2016 {
return _GLIBCXX_STD_A::merge(
2017 __begin1, __end1, __begin2, __end2, __result, __comp); }
2020 template<
typename _IIter1,
typename _IIter2,
typename _OutputIterator,
2021 typename _Compare,
typename _IteratorTag1,
2022 typename _IteratorTag2,
typename _IteratorTag3>
2023 inline _OutputIterator
2024 __merge_switch(_IIter1 __begin1, _IIter1 __end1,
2025 _IIter2 __begin2, _IIter2 __end2,
2026 _OutputIterator __result, _Compare __comp,
2027 _IteratorTag1, _IteratorTag2, _IteratorTag3)
2028 {
return _GLIBCXX_STD_A::merge(__begin1, __end1, __begin2, __end2,
2029 __result, __comp); }
2032 template<
typename _IIter1,
typename _IIter2,
2033 typename _OutputIterator,
typename _Compare>
2035 __merge_switch(_IIter1 __begin1, _IIter1 __end1,
2036 _IIter2 __begin2, _IIter2 __end2,
2037 _OutputIterator __result, _Compare __comp,
2038 random_access_iterator_tag, random_access_iterator_tag,
2039 random_access_iterator_tag)
2042 (static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
2044 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
2047 __begin1, __end1, __begin2, __end2, __result,
2048 (__end1 - __begin1) + (__end2 - __begin2), __comp);
2051 __begin1, __end1, __begin2, __end2, __result,
2052 (__end1 - __begin1) + (__end2 - __begin2), __comp);
2056 template<
typename _IIter1,
typename _IIter2,
2057 typename _OutputIterator,
typename _Compare>
2058 inline _OutputIterator
2059 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
2060 _IIter2 __end2, _OutputIterator __result, _Compare __comp)
2062 typedef typename iterator_traits<_IIter1>::value_type _ValueType;
2064 typedef std::iterator_traits<_IIter1> _IIterTraits1;
2065 typedef std::iterator_traits<_IIter2> _IIterTraits2;
2066 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
2067 typedef typename _IIterTraits1::iterator_category
2069 typedef typename _IIterTraits2::iterator_category
2071 typedef typename _OIterTraits::iterator_category _OIterCategory;
2073 return __merge_switch(
2074 __begin1, __end1, __begin2, __end2, __result, __comp,
2075 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
2080 template<
typename _IIter1,
typename _IIter2,
2081 typename _OutputIterator>
2082 inline _OutputIterator
2083 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
2084 _IIter2 __end2, _OutputIterator __result)
2086 typedef std::iterator_traits<_IIter1> _Iterator1Traits;
2087 typedef std::iterator_traits<_IIter2> _Iterator2Traits;
2088 typedef typename _Iterator1Traits::value_type _ValueType1;
2089 typedef typename _Iterator2Traits::value_type _ValueType2;
2091 return __gnu_parallel::merge(__begin1, __end1, __begin2, __end2,
2096 template<
typename _RAIter>
2098 nth_element(_RAIter __begin, _RAIter __nth,
2100 {
return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end); }
2103 template<
typename _RAIter,
typename _Compare>
2105 nth_element(_RAIter __begin, _RAIter __nth,
2106 _RAIter __end, _Compare __comp,
2108 {
return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end, __comp); }
2111 template<
typename _RAIter,
typename _Compare>
2113 nth_element(_RAIter __begin, _RAIter __nth,
2114 _RAIter __end, _Compare __comp)
2117 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
2121 nth_element(__begin, __nth, __end, __comp,
2126 template<
typename _RAIter>
2128 nth_element(_RAIter __begin, _RAIter __nth,
2131 typedef iterator_traits<_RAIter> _TraitsType;
2132 typedef typename _TraitsType::value_type _ValueType;
2133 __gnu_parallel::nth_element(__begin, __nth, __end,
2138 template<
typename _RAIter,
typename _Compare>
2140 partial_sort(_RAIter __begin, _RAIter __middle,
2141 _RAIter __end, _Compare __comp,
2143 { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end, __comp); }
2146 template<
typename _RAIter>
2148 partial_sort(_RAIter __begin, _RAIter __middle,
2150 { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end); }
2153 template<
typename _RAIter,
typename _Compare>
2155 partial_sort(_RAIter __begin, _RAIter __middle,
2156 _RAIter __end, _Compare __comp)
2159 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
2164 partial_sort(__begin, __middle, __end, __comp,
2169 template<
typename _RAIter>
2171 partial_sort(_RAIter __begin, _RAIter __middle,
2174 typedef iterator_traits<_RAIter> _TraitsType;
2175 typedef typename _TraitsType::value_type _ValueType;
2176 __gnu_parallel::partial_sort(__begin, __middle, __end,
2181 template<
typename _FIterator>
2183 max_element(_FIterator __begin, _FIterator __end,
2185 {
return _GLIBCXX_STD_A::max_element(__begin, __end); }
2188 template<
typename _FIterator,
typename _Compare>
2190 max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2192 {
return _GLIBCXX_STD_A::max_element(__begin, __end, __comp); }
2195 template<
typename _FIterator,
typename _Compare,
typename _IteratorTag>
2197 __max_element_switch(_FIterator __begin, _FIterator __end,
2198 _Compare __comp, _IteratorTag)
2199 {
return max_element(__begin, __end, __comp,
2203 template<
typename _RAIter,
typename _Compare>
2205 __max_element_switch(_RAIter __begin, _RAIter __end,
2206 _Compare __comp, random_access_iterator_tag,
2211 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
2213 && __gnu_parallel::__is_parallel(__parallelism_tag)))
2215 _RAIter __res(__begin);
2222 __res, __res, -1, __parallelism_tag);
2226 return max_element(__begin, __end, __comp,
2231 template<
typename _FIterator>
2233 max_element(_FIterator __begin, _FIterator __end,
2236 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2241 template<
typename _FIterator>
2243 max_element(_FIterator __begin, _FIterator __end)
2245 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2246 return __gnu_parallel::max_element(__begin, __end,
2251 template<
typename _FIterator,
typename _Compare>
2253 max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2256 typedef iterator_traits<_FIterator> _TraitsType;
2257 typedef typename _TraitsType::iterator_category _IteratorCategory;
2258 return __max_element_switch(__begin, __end, __comp, _IteratorCategory(),
2262 template<
typename _FIterator,
typename _Compare>
2264 max_element(_FIterator __begin, _FIterator __end, _Compare __comp)
2266 typedef iterator_traits<_FIterator> _TraitsType;
2267 typedef typename _TraitsType::iterator_category _IteratorCategory;
2268 return __max_element_switch(__begin, __end, __comp, _IteratorCategory());
2273 template<
typename _FIterator>
2275 min_element(_FIterator __begin, _FIterator __end,
2277 {
return _GLIBCXX_STD_A::min_element(__begin, __end); }
2280 template<
typename _FIterator,
typename _Compare>
2282 min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2284 {
return _GLIBCXX_STD_A::min_element(__begin, __end, __comp); }
2287 template<
typename _FIterator,
typename _Compare,
typename _IteratorTag>
2289 __min_element_switch(_FIterator __begin, _FIterator __end,
2290 _Compare __comp, _IteratorTag)
2291 {
return min_element(__begin, __end, __comp,
2295 template<
typename _RAIter,
typename _Compare>
2297 __min_element_switch(_RAIter __begin, _RAIter __end,
2298 _Compare __comp, random_access_iterator_tag,
2303 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
2305 && __gnu_parallel::__is_parallel(__parallelism_tag)))
2307 _RAIter __res(__begin);
2314 __res, __res, -1, __parallelism_tag);
2318 return min_element(__begin, __end, __comp,
2323 template<
typename _FIterator>
2325 min_element(_FIterator __begin, _FIterator __end,
2328 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2333 template<
typename _FIterator>
2335 min_element(_FIterator __begin, _FIterator __end)
2337 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2338 return __gnu_parallel::min_element(__begin, __end,
2343 template<
typename _FIterator,
typename _Compare>
2345 min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2348 typedef iterator_traits<_FIterator> _TraitsType;
2349 typedef typename _TraitsType::iterator_category _IteratorCategory;
2350 return __min_element_switch(__begin, __end, __comp, _IteratorCategory(),
2354 template<
typename _FIterator,
typename _Compare>
2356 min_element(_FIterator __begin, _FIterator __end, _Compare __comp)
2358 typedef iterator_traits<_FIterator> _TraitsType;
2359 typedef typename _TraitsType::iterator_category _IteratorCategory;
2360 return __min_element_switch(__begin, __end, __comp, _IteratorCategory());
Main interface for embarrassingly parallel functions.
static const _Settings & get()
Get the global settings.
iterator end() const
End iterator.
std::transform() __selector, one input sequence variant.
Parallelization of embarrassingly parallel execution by means of work-stealing.
Forces parallel sorting using balanced quicksort at compile time.
Reduction function doing nothing.
size_t count() const noexcept
Returns the number of bits which are set.
Parallel unbalanced (equal-sized chunks).
Test predicate on several elements.
One of the math functors.
iterator begin() const
Begin iterator.
Forces parallel sorting using multiway mergesort with exact splitting at compile time.
_OutputIterator __parallel_unique_copy(_IIter __first, _IIter __last, _OutputIterator __result, _BinaryPredicate __binary_pred)
Parallel std::unique_copy(), w/__o explicit equality predicate.
Parallel implementations of set operations for random-access iterators. This file is a GNU parallel e...
Functors representing different tasks to be plugged into the generic parallelization methods for emba...
void __parallel_random_shuffle(_RAIter __begin, _RAIter __end, _RandomNumberGenerator __rng=_RandomNumber())
Parallel random public call.
void __sequential_random_shuffle(_RAIter __begin, _RAIter __end, _RandomNumberGenerator &__rng)
Sequential cache-efficient random shuffle.
Parallel implementation of std::partition(), std::nth_element(), and std::partial_sort(). This file is a GNU parallel extension to the Standard C++ Library.
std::transform() __selector, two input sequences variant.
_Parallelism
Run-time equivalents for the compile-time tags.
Parallelization of embarrassingly parallel execution by means of an OpenMP for loop with static sched...
Forces sequential execution at compile time.
Parallel implementation base for std::find(), std::equal() and related functions. This file is a GNU ...
Forces parallel sorting using unbalanced quicksort at compile time.
Similar to std::binder2nd, but giving the argument types explicitly.
std::generate() selector.
Parallel implementation base for std::search() and std::search_n(). This file is a GNU parallel exten...
_It _M_finish_iterator
_Iterator on last element processed; needed for some algorithms (e. g. std::transform()).
void __parallel_partial_sort(_RAIter __begin, _RAIter __middle, _RAIter __end, _Compare __comp)
Parallel implementation of std::partial_sort().
Selector that just returns the passed iterator.
Parallel balanced (work-stealing).
Parallelization of embarrassingly parallel execution by means of an OpenMP for loop. 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...
#define _GLIBCXX_PARALLEL_CONDITION(__c)
Determine at compile(?)-time if the parallel variant of an algorithm should be called.
uint64_t _SequenceIndex
Unsigned integer to index __elements. The total number of elements for each algorithm must fit into t...
Reduction for finding the maximum element, using a comparator.
std::count_if () selector.
Similar to std::equal_to, but allows two different types.
Parallel sorting algorithm switch. This file is a GNU parallel extension to the Standard C++ Library...
Recommends parallel execution at compile time, optionally using a user-specified number of threads...
Similar to std::less, but allows two different types.
std::for_each() selector.
A triple of iterators. The usual iterator operations are applied to all three child iterators...
std::pair< _RAIter1, _RAIter2 > __find_template(_RAIter1 __begin1, _RAIter1 __end1, _RAIter2 __begin2, _Pred __pred, _Selector __selector)
Parallel std::find, switch for different algorithms.
Parallel implementation of std::merge(). This file is a GNU parallel extension to the Standard C++ Li...
Forces parallel sorting using multiway mergesort at compile time.
void __parallel_nth_element(_RAIter __begin, _RAIter __nth, _RAIter __end, _Compare __comp)
Parallel implementation of std::nth_element().
Parallel implementation of std::random_shuffle(). This file is a GNU parallel extension to the Standa...
Reduction for finding the maximum element, using a comparator.
One of the comparison functors.
Sequence that conceptually consists of multiple copies of the same element. The copies are not stored...
_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.
Functor wrapper for std::rand().
A pair of iterators. The usual iterator operations are applied to both child iterators.
Parallelization of embarrassingly parallel execution by means of equal splitting. This file is a GNU ...
__RAIter1 __search_template(__RAIter1 __begin1, __RAIter1 __end1, __RAIter2 __begin2, __RAIter2 __end2, _Pred __pred)
Parallel std::search.
One of the comparison functors.
Forces parallel sorting using multiway mergesort with splitting by sampling at compile time...
Helper iterator classes for the std::transform() functions. This file is a GNU parallel extension to ...
Sequential helper functions. This file is a GNU parallel extension to the Standard C++ Library...
Test predicate on two adjacent elements.
Test predicate on a single element, used for std::find() and std::find_if ().
Random-access iterators support a superset of bidirectional iterator operations.
_Function objects representing different tasks to be plugged into the parallel find algorithm...
_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.
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...
Recommends parallel execution using the default parallel algorithm.