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,
88 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
90 && __gnu_parallel::__is_parallel(__parallelism_tag)))
97 __begin, __end, __f, __functionality,
106 template<
typename _Iterator,
typename _Function>
108 for_each(_Iterator __begin, _Iterator __end, _Function __f,
111 typedef std::iterator_traits<_Iterator> _IteratorTraits;
112 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
113 return __for_each_switch(__begin, __end, __f, _IteratorCategory(),
117 template<
typename _Iterator,
typename _Function>
119 for_each(_Iterator __begin, _Iterator __end, _Function __f)
121 typedef std::iterator_traits<_Iterator> _IteratorTraits;
122 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
123 return __for_each_switch(__begin, __end, __f, _IteratorCategory());
128 template<
typename _IIter,
typename _Tp>
130 find(_IIter __begin, _IIter __end,
const _Tp& __val,
132 {
return _GLIBCXX_STD_A::find(__begin, __end, __val); }
135 template<
typename _IIter,
typename _Tp,
typename _IteratorTag>
137 __find_switch(_IIter __begin, _IIter __end,
const _Tp& __val,
139 {
return _GLIBCXX_STD_A::find(__begin, __end, __val); }
142 template<
typename _RAIter,
typename _Tp>
144 __find_switch(_RAIter __begin, _RAIter __end,
147 typedef iterator_traits<_RAIter> _TraitsType;
148 typedef typename _TraitsType::value_type _ValueType;
154 _ValueType,
const _Tp&,
bool>
157 __begin, __end, __begin, __comp,
161 return _GLIBCXX_STD_A::find(__begin, __end, __val);
165 template<
typename _IIter,
typename _Tp>
167 find(_IIter __begin, _IIter __end,
const _Tp& __val)
169 typedef std::iterator_traits<_IIter> _IteratorTraits;
170 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
171 return __find_switch(__begin, __end, __val, _IteratorCategory());
175 template<
typename _IIter,
typename _Predicate>
177 find_if(_IIter __begin, _IIter __end, _Predicate __pred,
179 {
return _GLIBCXX_STD_A::find_if(__begin, __end, __pred); }
182 template<
typename _IIter,
typename _Predicate,
typename _IteratorTag>
184 __find_if_switch(_IIter __begin, _IIter __end, _Predicate __pred,
186 {
return _GLIBCXX_STD_A::find_if(__begin, __end, __pred); }
189 template<
typename _RAIter,
typename _Predicate>
191 __find_if_switch(_RAIter __begin, _RAIter __end,
197 __find_if_selector()).first;
199 return _GLIBCXX_STD_A::find_if(__begin, __end, __pred);
203 template<
typename _IIter,
typename _Predicate>
205 find_if(_IIter __begin, _IIter __end, _Predicate __pred)
207 typedef std::iterator_traits<_IIter> _IteratorTraits;
208 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
209 return __find_if_switch(__begin, __end, __pred, _IteratorCategory());
213 template<
typename _IIter,
typename _FIterator>
215 find_first_of(_IIter __begin1, _IIter __end1,
216 _FIterator __begin2, _FIterator __end2,
218 {
return _GLIBCXX_STD_A::find_first_of(__begin1, __end1, __begin2, __end2);
222 template<
typename _IIter,
typename _FIterator,
223 typename _BinaryPredicate>
225 find_first_of(_IIter __begin1, _IIter __end1,
226 _FIterator __begin2, _FIterator __end2,
228 {
return _GLIBCXX_STD_A::find_first_of(
229 __begin1, __end1, __begin2, __end2, __comp); }
232 template<
typename _IIter,
typename _FIterator,
233 typename _IteratorTag1,
typename _IteratorTag2>
235 __find_first_of_switch(_IIter __begin1, _IIter __end1,
236 _FIterator __begin2, _FIterator __end2,
237 _IteratorTag1, _IteratorTag2)
238 {
return find_first_of(__begin1, __end1, __begin2, __end2,
242 template<
typename _RAIter,
typename _FIterator,
243 typename _BinaryPredicate,
typename _IteratorTag>
245 __find_first_of_switch(_RAIter __begin1,
247 _FIterator __begin2, _FIterator __end2,
254 <_FIterator>(__begin2, __end2)).first;
258 template<
typename _IIter,
typename _FIterator,
259 typename _BinaryPredicate,
typename _IteratorTag1,
260 typename _IteratorTag2>
262 __find_first_of_switch(_IIter __begin1, _IIter __end1,
263 _FIterator __begin2, _FIterator __end2,
264 _BinaryPredicate __comp, _IteratorTag1, _IteratorTag2)
265 {
return find_first_of(__begin1, __end1, __begin2, __end2, __comp,
269 template<
typename _IIter,
typename _FIterator,
270 typename _BinaryPredicate>
272 find_first_of(_IIter __begin1, _IIter __end1,
273 _FIterator __begin2, _FIterator __end2,
274 _BinaryPredicate __comp)
276 typedef std::iterator_traits<_IIter> _IIterTraits;
277 typedef std::iterator_traits<_FIterator> _FIterTraits;
278 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
279 typedef typename _FIterTraits::iterator_category _FIteratorCategory;
281 return __find_first_of_switch(__begin1, __end1, __begin2, __end2, __comp,
282 _IIteratorCategory(), _FIteratorCategory());
286 template<
typename _IIter,
typename _FIterator>
288 find_first_of(_IIter __begin1, _IIter __end1,
289 _FIterator __begin2, _FIterator __end2)
291 typedef std::iterator_traits<_IIter> _IIterTraits;
292 typedef std::iterator_traits<_FIterator> _FIterTraits;
293 typedef typename _IIterTraits::value_type _IValueType;
294 typedef typename _FIterTraits::value_type _FValueType;
296 return __gnu_parallel::find_first_of(__begin1, __end1, __begin2, __end2,
301 template<
typename _IIter,
typename _OutputIterator>
302 inline _OutputIterator
303 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
305 {
return _GLIBCXX_STD_A::unique_copy(__begin1, __end1, __out); }
308 template<
typename _IIter,
typename _OutputIterator,
310 inline _OutputIterator
311 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
313 {
return _GLIBCXX_STD_A::unique_copy(__begin1, __end1, __out, __pred); }
316 template<
typename _IIter,
typename _OutputIterator,
317 typename _Predicate,
typename _IteratorTag1,
typename _IteratorTag2>
318 inline _OutputIterator
319 __unique_copy_switch(_IIter __begin, _IIter __last,
320 _OutputIterator __out, _Predicate __pred,
321 _IteratorTag1, _IteratorTag2)
322 {
return _GLIBCXX_STD_A::unique_copy(__begin, __last, __out, __pred); }
325 template<
typename _RAIter,
typename RandomAccessOutputIterator,
327 RandomAccessOutputIterator
328 __unique_copy_switch(_RAIter __begin, _RAIter __last,
329 RandomAccessOutputIterator __out, _Predicate __pred,
333 static_cast<__gnu_parallel::_SequenceIndex>(__last - __begin)
336 __begin, __last, __out, __pred);
338 return _GLIBCXX_STD_A::unique_copy(__begin, __last, __out, __pred);
342 template<
typename _IIter,
typename _OutputIterator>
343 inline _OutputIterator
344 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out)
346 typedef std::iterator_traits<_IIter> _IIterTraits;
347 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
348 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
349 typedef typename _IIterTraits::value_type _ValueType;
350 typedef typename _OIterTraits::iterator_category _OIterCategory;
352 return __unique_copy_switch(
354 _IIteratorCategory(), _OIterCategory());
358 template<
typename _IIter,
typename _OutputIterator,
typename _Predicate>
359 inline _OutputIterator
360 unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
363 typedef std::iterator_traits<_IIter> _IIterTraits;
364 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
365 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
366 typedef typename _OIterTraits::iterator_category _OIterCategory;
368 return __unique_copy_switch(
369 __begin1, __end1, __out, __pred,
370 _IIteratorCategory(), _OIterCategory());
374 template<
typename _IIter1,
typename _IIter2,
375 typename _OutputIterator>
376 inline _OutputIterator
377 set_union(_IIter1 __begin1, _IIter1 __end1,
378 _IIter2 __begin2, _IIter2 __end2,
380 {
return _GLIBCXX_STD_A::set_union(
381 __begin1, __end1, __begin2, __end2, __out); }
384 template<
typename _IIter1,
typename _IIter2,
385 typename _OutputIterator,
typename _Predicate>
386 inline _OutputIterator
387 set_union(_IIter1 __begin1, _IIter1 __end1,
388 _IIter2 __begin2, _IIter2 __end2,
389 _OutputIterator __out, _Predicate __pred,
391 {
return _GLIBCXX_STD_A::set_union(__begin1, __end1,
392 __begin2, __end2, __out, __pred); }
395 template<
typename _IIter1,
typename _IIter2,
typename _Predicate,
396 typename _OutputIterator,
typename _IteratorTag1,
397 typename _IteratorTag2,
typename _IteratorTag3>
398 inline _OutputIterator
400 _IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _IIter2 __end2,
401 _OutputIterator __result, _Predicate __pred,
402 _IteratorTag1, _IteratorTag2, _IteratorTag3)
403 {
return _GLIBCXX_STD_A::set_union(__begin1, __end1,
404 __begin2, __end2, __result, __pred); }
407 template<
typename _RAIter1,
typename _RAIter2,
408 typename _Output_RAIter,
typename _Predicate>
410 __set_union_switch(_RAIter1 __begin1, _RAIter1 __end1,
411 _RAIter2 __begin2, _RAIter2 __end2,
412 _Output_RAIter __result, _Predicate __pred,
417 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
419 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
421 return __gnu_parallel::__parallel_set_union(
422 __begin1, __end1, __begin2, __end2, __result, __pred);
424 return _GLIBCXX_STD_A::set_union(__begin1, __end1,
425 __begin2, __end2, __result, __pred);
429 template<
typename _IIter1,
typename _IIter2,
430 typename _OutputIterator>
431 inline _OutputIterator
432 set_union(_IIter1 __begin1, _IIter1 __end1,
433 _IIter2 __begin2, _IIter2 __end2, _OutputIterator __out)
435 typedef std::iterator_traits<_IIter1> _IIterTraits1;
436 typedef std::iterator_traits<_IIter2> _IIterTraits2;
437 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
438 typedef typename _IIterTraits1::iterator_category
440 typedef typename _IIterTraits2::iterator_category
442 typedef typename _OIterTraits::iterator_category _OIterCategory;
443 typedef typename _IIterTraits1::value_type _ValueType1;
444 typedef typename _IIterTraits2::value_type _ValueType2;
446 return __set_union_switch(
447 __begin1, __end1, __begin2, __end2, __out,
449 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
453 template<
typename _IIter1,
typename _IIter2,
454 typename _OutputIterator,
typename _Predicate>
455 inline _OutputIterator
456 set_union(_IIter1 __begin1, _IIter1 __end1,
457 _IIter2 __begin2, _IIter2 __end2,
458 _OutputIterator __out, _Predicate __pred)
460 typedef std::iterator_traits<_IIter1> _IIterTraits1;
461 typedef std::iterator_traits<_IIter2> _IIterTraits2;
462 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
463 typedef typename _IIterTraits1::iterator_category
465 typedef typename _IIterTraits2::iterator_category
467 typedef typename _OIterTraits::iterator_category _OIterCategory;
469 return __set_union_switch(
470 __begin1, __end1, __begin2, __end2, __out, __pred,
471 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
475 template<
typename _IIter1,
typename _IIter2,
476 typename _OutputIterator>
477 inline _OutputIterator
478 set_intersection(_IIter1 __begin1, _IIter1 __end1,
479 _IIter2 __begin2, _IIter2 __end2,
481 {
return _GLIBCXX_STD_A::set_intersection(__begin1, __end1,
482 __begin2, __end2, __out); }
485 template<
typename _IIter1,
typename _IIter2,
486 typename _OutputIterator,
typename _Predicate>
487 inline _OutputIterator
488 set_intersection(_IIter1 __begin1, _IIter1 __end1,
489 _IIter2 __begin2, _IIter2 __end2,
490 _OutputIterator __out, _Predicate __pred,
492 {
return _GLIBCXX_STD_A::set_intersection(
493 __begin1, __end1, __begin2, __end2, __out, __pred); }
496 template<
typename _IIter1,
typename _IIter2,
497 typename _Predicate,
typename _OutputIterator,
498 typename _IteratorTag1,
typename _IteratorTag2,
499 typename _IteratorTag3>
500 inline _OutputIterator
501 __set_intersection_switch(_IIter1 __begin1, _IIter1 __end1,
502 _IIter2 __begin2, _IIter2 __end2,
503 _OutputIterator __result, _Predicate __pred,
504 _IteratorTag1, _IteratorTag2, _IteratorTag3)
505 {
return _GLIBCXX_STD_A::set_intersection(__begin1, __end1, __begin2,
506 __end2, __result, __pred); }
509 template<
typename _RAIter1,
typename _RAIter2,
510 typename _Output_RAIter,
typename _Predicate>
512 __set_intersection_switch(_RAIter1 __begin1,
516 _Output_RAIter __result,
523 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
525 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
527 return __gnu_parallel::__parallel_set_intersection(
528 __begin1, __end1, __begin2, __end2, __result, __pred);
530 return _GLIBCXX_STD_A::set_intersection(
531 __begin1, __end1, __begin2, __end2, __result, __pred);
535 template<
typename _IIter1,
typename _IIter2,
536 typename _OutputIterator>
537 inline _OutputIterator
538 set_intersection(_IIter1 __begin1, _IIter1 __end1,
539 _IIter2 __begin2, _IIter2 __end2,
540 _OutputIterator __out)
542 typedef std::iterator_traits<_IIter1> _IIterTraits1;
543 typedef std::iterator_traits<_IIter2> _IIterTraits2;
544 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
545 typedef typename _IIterTraits1::iterator_category
547 typedef typename _IIterTraits2::iterator_category
549 typedef typename _OIterTraits::iterator_category _OIterCategory;
550 typedef typename _IIterTraits1::value_type _ValueType1;
551 typedef typename _IIterTraits2::value_type _ValueType2;
553 return __set_intersection_switch(
554 __begin1, __end1, __begin2, __end2, __out,
556 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
559 template<
typename _IIter1,
typename _IIter2,
560 typename _OutputIterator,
typename _Predicate>
561 inline _OutputIterator
562 set_intersection(_IIter1 __begin1, _IIter1 __end1,
563 _IIter2 __begin2, _IIter2 __end2,
564 _OutputIterator __out, _Predicate __pred)
566 typedef std::iterator_traits<_IIter1> _IIterTraits1;
567 typedef std::iterator_traits<_IIter2> _IIterTraits2;
568 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
569 typedef typename _IIterTraits1::iterator_category
571 typedef typename _IIterTraits2::iterator_category
573 typedef typename _OIterTraits::iterator_category _OIterCategory;
575 return __set_intersection_switch(
576 __begin1, __end1, __begin2, __end2, __out, __pred,
577 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
581 template<
typename _IIter1,
typename _IIter2,
582 typename _OutputIterator>
583 inline _OutputIterator
584 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
585 _IIter2 __begin2, _IIter2 __end2,
586 _OutputIterator __out,
588 {
return _GLIBCXX_STD_A::set_symmetric_difference(
589 __begin1, __end1, __begin2, __end2, __out); }
592 template<
typename _IIter1,
typename _IIter2,
593 typename _OutputIterator,
typename _Predicate>
594 inline _OutputIterator
595 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
596 _IIter2 __begin2, _IIter2 __end2,
597 _OutputIterator __out, _Predicate __pred,
599 {
return _GLIBCXX_STD_A::set_symmetric_difference(
600 __begin1, __end1, __begin2, __end2, __out, __pred); }
603 template<
typename _IIter1,
typename _IIter2,
604 typename _Predicate,
typename _OutputIterator,
605 typename _IteratorTag1,
typename _IteratorTag2,
606 typename _IteratorTag3>
607 inline _OutputIterator
608 __set_symmetric_difference_switch(
609 _IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _IIter2 __end2,
610 _OutputIterator __result, _Predicate __pred,
611 _IteratorTag1, _IteratorTag2, _IteratorTag3)
612 {
return _GLIBCXX_STD_A::set_symmetric_difference(
613 __begin1, __end1, __begin2, __end2, __result, __pred); }
616 template<
typename _RAIter1,
typename _RAIter2,
617 typename _Output_RAIter,
typename _Predicate>
619 __set_symmetric_difference_switch(_RAIter1 __begin1,
623 _Output_RAIter __result,
630 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
632 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
634 return __gnu_parallel::__parallel_set_symmetric_difference(
635 __begin1, __end1, __begin2, __end2, __result, __pred);
637 return _GLIBCXX_STD_A::set_symmetric_difference(
638 __begin1, __end1, __begin2, __end2, __result, __pred);
642 template<
typename _IIter1,
typename _IIter2,
643 typename _OutputIterator>
644 inline _OutputIterator
645 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
646 _IIter2 __begin2, _IIter2 __end2,
647 _OutputIterator __out)
649 typedef std::iterator_traits<_IIter1> _IIterTraits1;
650 typedef std::iterator_traits<_IIter2> _IIterTraits2;
651 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
652 typedef typename _IIterTraits1::iterator_category
654 typedef typename _IIterTraits2::iterator_category
656 typedef typename _OIterTraits::iterator_category _OIterCategory;
657 typedef typename _IIterTraits1::value_type _ValueType1;
658 typedef typename _IIterTraits2::value_type _ValueType2;
660 return __set_symmetric_difference_switch(
661 __begin1, __end1, __begin2, __end2, __out,
663 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
667 template<
typename _IIter1,
typename _IIter2,
668 typename _OutputIterator,
typename _Predicate>
669 inline _OutputIterator
670 set_symmetric_difference(_IIter1 __begin1, _IIter1 __end1,
671 _IIter2 __begin2, _IIter2 __end2,
672 _OutputIterator __out, _Predicate __pred)
674 typedef std::iterator_traits<_IIter1> _IIterTraits1;
675 typedef std::iterator_traits<_IIter2> _IIterTraits2;
676 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
677 typedef typename _IIterTraits1::iterator_category
679 typedef typename _IIterTraits2::iterator_category
681 typedef typename _OIterTraits::iterator_category _OIterCategory;
683 return __set_symmetric_difference_switch(
684 __begin1, __end1, __begin2, __end2, __out, __pred,
685 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
689 template<
typename _IIter1,
typename _IIter2,
690 typename _OutputIterator>
691 inline _OutputIterator
692 set_difference(_IIter1 __begin1, _IIter1 __end1,
693 _IIter2 __begin2, _IIter2 __end2,
695 {
return _GLIBCXX_STD_A::set_difference(
696 __begin1,__end1, __begin2, __end2, __out); }
699 template<
typename _IIter1,
typename _IIter2,
700 typename _OutputIterator,
typename _Predicate>
701 inline _OutputIterator
702 set_difference(_IIter1 __begin1, _IIter1 __end1,
703 _IIter2 __begin2, _IIter2 __end2,
704 _OutputIterator __out, _Predicate __pred,
706 {
return _GLIBCXX_STD_A::set_difference(__begin1, __end1,
707 __begin2, __end2, __out, __pred); }
710 template<
typename _IIter1,
typename _IIter2,
typename _Predicate,
711 typename _OutputIterator,
typename _IteratorTag1,
712 typename _IteratorTag2,
typename _IteratorTag3>
713 inline _OutputIterator
714 __set_difference_switch(_IIter1 __begin1, _IIter1 __end1,
715 _IIter2 __begin2, _IIter2 __end2,
716 _OutputIterator __result, _Predicate __pred,
717 _IteratorTag1, _IteratorTag2, _IteratorTag3)
718 {
return _GLIBCXX_STD_A::set_difference(
719 __begin1, __end1, __begin2, __end2, __result, __pred); }
722 template<
typename _RAIter1,
typename _RAIter2,
723 typename _Output_RAIter,
typename _Predicate>
725 __set_difference_switch(_RAIter1 __begin1,
729 _Output_RAIter __result, _Predicate __pred,
735 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
737 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
739 return __gnu_parallel::__parallel_set_difference(
740 __begin1, __end1, __begin2, __end2, __result, __pred);
742 return _GLIBCXX_STD_A::set_difference(
743 __begin1, __end1, __begin2, __end2, __result, __pred);
747 template<
typename _IIter1,
typename _IIter2,
748 typename _OutputIterator>
749 inline _OutputIterator
750 set_difference(_IIter1 __begin1, _IIter1 __end1,
751 _IIter2 __begin2, _IIter2 __end2,
752 _OutputIterator __out)
754 typedef std::iterator_traits<_IIter1> _IIterTraits1;
755 typedef std::iterator_traits<_IIter2> _IIterTraits2;
756 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
757 typedef typename _IIterTraits1::iterator_category
759 typedef typename _IIterTraits2::iterator_category
761 typedef typename _OIterTraits::iterator_category _OIterCategory;
762 typedef typename _IIterTraits1::value_type _ValueType1;
763 typedef typename _IIterTraits2::value_type _ValueType2;
765 return __set_difference_switch(
766 __begin1, __end1, __begin2, __end2, __out,
768 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
772 template<
typename _IIter1,
typename _IIter2,
773 typename _OutputIterator,
typename _Predicate>
774 inline _OutputIterator
775 set_difference(_IIter1 __begin1, _IIter1 __end1,
776 _IIter2 __begin2, _IIter2 __end2,
777 _OutputIterator __out, _Predicate __pred)
779 typedef std::iterator_traits<_IIter1> _IIterTraits1;
780 typedef std::iterator_traits<_IIter2> _IIterTraits2;
781 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
782 typedef typename _IIterTraits1::iterator_category
784 typedef typename _IIterTraits2::iterator_category
786 typedef typename _OIterTraits::iterator_category _OIterCategory;
788 return __set_difference_switch(
789 __begin1, __end1, __begin2, __end2, __out, __pred,
790 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
794 template<
typename _FIterator>
796 adjacent_find(_FIterator __begin, _FIterator __end,
798 {
return _GLIBCXX_STD_A::adjacent_find(__begin, __end); }
801 template<
typename _FIterator,
typename _BinaryPredicate>
803 adjacent_find(_FIterator __begin, _FIterator __end,
804 _BinaryPredicate __binary_pred,
806 {
return _GLIBCXX_STD_A::adjacent_find(__begin, __end, __binary_pred); }
809 template<
typename _RAIter>
811 __adjacent_find_switch(_RAIter __begin, _RAIter __end,
814 typedef iterator_traits<_RAIter> _TraitsType;
815 typedef typename _TraitsType::value_type _ValueType;
824 if (__spot == (__end - 1))
834 template<
typename _FIterator,
typename _IteratorTag>
836 __adjacent_find_switch(_FIterator __begin, _FIterator __end,
841 template<
typename _FIterator>
843 adjacent_find(_FIterator __begin, _FIterator __end)
845 typedef iterator_traits<_FIterator> _TraitsType;
846 typedef typename _TraitsType::iterator_category _IteratorCategory;
847 return __adjacent_find_switch(__begin, __end, _IteratorCategory());
851 template<
typename _FIterator,
typename _BinaryPredicate,
852 typename _IteratorTag>
854 __adjacent_find_switch(_FIterator __begin, _FIterator __end,
855 _BinaryPredicate __pred, _IteratorTag)
856 {
return adjacent_find(__begin, __end, __pred,
860 template<
typename _RAIter,
typename _BinaryPredicate>
862 __adjacent_find_switch(_RAIter __begin, _RAIter __end,
868 __adjacent_find_selector()).first;
870 return adjacent_find(__begin, __end, __pred,
875 template<
typename _FIterator,
typename _BinaryPredicate>
877 adjacent_find(_FIterator __begin, _FIterator __end,
878 _BinaryPredicate __pred)
880 typedef iterator_traits<_FIterator> _TraitsType;
881 typedef typename _TraitsType::iterator_category _IteratorCategory;
882 return __adjacent_find_switch(__begin, __end, __pred,
883 _IteratorCategory());
887 template<
typename _IIter,
typename _Tp>
888 inline typename iterator_traits<_IIter>::difference_type
889 count(_IIter __begin, _IIter __end,
const _Tp& __value,
891 {
return _GLIBCXX_STD_A::count(__begin, __end, __value); }
894 template<
typename _RAIter,
typename _Tp>
895 typename iterator_traits<_RAIter>::difference_type
896 __count_switch(_RAIter __begin, _RAIter __end,
900 typedef iterator_traits<_RAIter> _TraitsType;
901 typedef typename _TraitsType::value_type _ValueType;
902 typedef typename _TraitsType::difference_type _DifferenceType;
906 static_cast<_SequenceIndex>(__end - __begin)
908 && __gnu_parallel::__is_parallel(__parallelism_tag)))
912 _DifferenceType __res = 0;
915 __begin, __end, __value, __functionality,
921 return count(__begin, __end, __value,
926 template<
typename _IIter,
typename _Tp,
typename _IteratorTag>
927 inline typename iterator_traits<_IIter>::difference_type
928 __count_switch(_IIter __begin, _IIter __end,
const _Tp& __value,
934 template<
typename _IIter,
typename _Tp>
935 inline typename iterator_traits<_IIter>::difference_type
936 count(_IIter __begin, _IIter __end,
const _Tp& __value,
939 typedef iterator_traits<_IIter> _TraitsType;
940 typedef typename _TraitsType::iterator_category _IteratorCategory;
941 return __count_switch(__begin, __end, __value, _IteratorCategory(),
945 template<
typename _IIter,
typename _Tp>
946 inline typename iterator_traits<_IIter>::difference_type
947 count(_IIter __begin, _IIter __end,
const _Tp& __value)
949 typedef iterator_traits<_IIter> _TraitsType;
950 typedef typename _TraitsType::iterator_category _IteratorCategory;
951 return __count_switch(__begin, __end, __value, _IteratorCategory());
956 template<
typename _IIter,
typename _Predicate>
957 inline typename iterator_traits<_IIter>::difference_type
958 count_if(_IIter __begin, _IIter __end, _Predicate __pred,
960 {
return _GLIBCXX_STD_A::count_if(__begin, __end, __pred); }
963 template<
typename _RAIter,
typename _Predicate>
964 typename iterator_traits<_RAIter>::difference_type
965 __count_if_switch(_RAIter __begin, _RAIter __end,
969 typedef iterator_traits<_RAIter> _TraitsType;
970 typedef typename _TraitsType::value_type _ValueType;
971 typedef typename _TraitsType::difference_type _DifferenceType;
975 static_cast<_SequenceIndex>(__end - __begin)
977 && __gnu_parallel::__is_parallel(__parallelism_tag)))
979 _DifferenceType __res = 0;
985 __begin, __end, __pred, __functionality,
991 return count_if(__begin, __end, __pred,
996 template<
typename _IIter,
typename _Predicate,
typename _IteratorTag>
997 inline typename iterator_traits<_IIter>::difference_type
998 __count_if_switch(_IIter __begin, _IIter __end, _Predicate __pred,
1000 {
return count_if(__begin, __end, __pred,
1004 template<
typename _IIter,
typename _Predicate>
1005 inline typename iterator_traits<_IIter>::difference_type
1006 count_if(_IIter __begin, _IIter __end, _Predicate __pred,
1009 typedef iterator_traits<_IIter> _TraitsType;
1010 typedef typename _TraitsType::iterator_category _IteratorCategory;
1011 return __count_if_switch(__begin, __end, __pred, _IteratorCategory(),
1015 template<
typename _IIter,
typename _Predicate>
1016 inline typename iterator_traits<_IIter>::difference_type
1017 count_if(_IIter __begin, _IIter __end, _Predicate __pred)
1019 typedef iterator_traits<_IIter> _TraitsType;
1020 typedef typename _TraitsType::iterator_category _IteratorCategory;
1021 return __count_if_switch(__begin, __end, __pred, _IteratorCategory());
1026 template<
typename _FIterator1,
typename _FIterator2>
1028 search(_FIterator1 __begin1, _FIterator1 __end1,
1029 _FIterator2 __begin2, _FIterator2 __end2,
1031 {
return _GLIBCXX_STD_A::search(__begin1, __end1, __begin2, __end2); }
1034 template<
typename _RAIter1,
typename _RAIter2>
1036 __search_switch(_RAIter1 __begin1, _RAIter1 __end1,
1037 _RAIter2 __begin2, _RAIter2 __end2,
1040 typedef std::iterator_traits<_RAIter1> _Iterator1Traits;
1041 typedef typename _Iterator1Traits::value_type _ValueType1;
1042 typedef std::iterator_traits<_RAIter2> _Iterator2Traits;
1043 typedef typename _Iterator2Traits::value_type _ValueType2;
1046 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
1050 __begin1, __end1, __begin2, __end2,
1053 return search(__begin1, __end1, __begin2, __end2,
1058 template<
typename _FIterator1,
typename _FIterator2,
1059 typename _IteratorTag1,
typename _IteratorTag2>
1061 __search_switch(_FIterator1 __begin1, _FIterator1 __end1,
1062 _FIterator2 __begin2, _FIterator2 __end2,
1063 _IteratorTag1, _IteratorTag2)
1064 {
return search(__begin1, __end1, __begin2, __end2,
1068 template<
typename _FIterator1,
typename _FIterator2>
1070 search(_FIterator1 __begin1, _FIterator1 __end1,
1071 _FIterator2 __begin2, _FIterator2 __end2)
1073 typedef std::iterator_traits<_FIterator1> _Iterator1Traits;
1074 typedef typename _Iterator1Traits::iterator_category _IteratorCategory1;
1075 typedef std::iterator_traits<_FIterator2> _Iterator2Traits;
1076 typedef typename _Iterator2Traits::iterator_category _IteratorCategory2;
1078 return __search_switch(__begin1, __end1, __begin2, __end2,
1079 _IteratorCategory1(), _IteratorCategory2());
1083 template<
typename _FIterator1,
typename _FIterator2,
1084 typename _BinaryPredicate>
1086 search(_FIterator1 __begin1, _FIterator1 __end1,
1087 _FIterator2 __begin2, _FIterator2 __end2,
1089 {
return _GLIBCXX_STD_A::search(
1090 __begin1, __end1, __begin2, __end2, __pred); }
1093 template<
typename _RAIter1,
typename _RAIter2,
1094 typename _BinaryPredicate>
1096 __search_switch(_RAIter1 __begin1, _RAIter1 __end1,
1097 _RAIter2 __begin2, _RAIter2 __end2,
1098 _BinaryPredicate __pred,
1102 static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
1105 __begin2, __end2, __pred);
1107 return search(__begin1, __end1, __begin2, __end2, __pred,
1112 template<
typename _FIterator1,
typename _FIterator2,
1113 typename _BinaryPredicate,
typename _IteratorTag1,
1114 typename _IteratorTag2>
1116 __search_switch(_FIterator1 __begin1, _FIterator1 __end1,
1117 _FIterator2 __begin2, _FIterator2 __end2,
1118 _BinaryPredicate __pred, _IteratorTag1, _IteratorTag2)
1119 {
return search(__begin1, __end1, __begin2, __end2, __pred,
1123 template<
typename _FIterator1,
typename _FIterator2,
1124 typename _BinaryPredicate>
1126 search(_FIterator1 __begin1, _FIterator1 __end1,
1127 _FIterator2 __begin2, _FIterator2 __end2,
1128 _BinaryPredicate __pred)
1130 typedef std::iterator_traits<_FIterator1> _Iterator1Traits;
1131 typedef typename _Iterator1Traits::iterator_category _IteratorCategory1;
1132 typedef std::iterator_traits<_FIterator2> _Iterator2Traits;
1133 typedef typename _Iterator2Traits::iterator_category _IteratorCategory2;
1134 return __search_switch(__begin1, __end1, __begin2, __end2, __pred,
1135 _IteratorCategory1(), _IteratorCategory2());
1139 template<
typename _FIterator,
typename _Integer,
typename _Tp>
1141 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1143 {
return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val); }
1146 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1147 typename _BinaryPredicate>
1149 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1150 const _Tp& __val, _BinaryPredicate __binary_pred,
1152 {
return _GLIBCXX_STD_A::search_n(
1153 __begin, __end, __count, __val, __binary_pred); }
1156 template<
typename _FIterator,
typename _Integer,
typename _Tp>
1158 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1161 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
1162 return __gnu_parallel::search_n(__begin, __end, __count, __val,
1167 template<
typename _RAIter,
typename _Integer,
1168 typename _Tp,
typename _BinaryPredicate>
1170 __search_n_switch(_RAIter __begin, _RAIter __end, _Integer __count,
1171 const _Tp& __val, _BinaryPredicate __binary_pred,
1175 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1180 __begin, __end, __ps.
begin(), __ps.
end(), __binary_pred);
1183 return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
1188 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1189 typename _BinaryPredicate,
typename _IteratorTag>
1191 __search_n_switch(_FIterator __begin, _FIterator __end, _Integer __count,
1192 const _Tp& __val, _BinaryPredicate __binary_pred,
1194 {
return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
1198 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1199 typename _BinaryPredicate>
1201 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1202 const _Tp& __val, _BinaryPredicate __binary_pred)
1204 return __search_n_switch(__begin, __end, __count, __val, __binary_pred,
1205 typename std::iterator_traits<_FIterator>::
1206 iterator_category());
1211 template<
typename _IIter,
typename _OutputIterator,
1212 typename _UnaryOperation>
1213 inline _OutputIterator
1214 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1216 {
return _GLIBCXX_STD_A::transform(__begin, __end, __result, __unary_op); }
1219 template<
typename _RAIter1,
typename _RAIter2,
1220 typename _UnaryOperation>
1222 __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
1223 _RAIter2 __result, _UnaryOperation __unary_op,
1228 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1230 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1232 bool __dummy =
true;
1235 _ItTrip __begin_pair(__begin, __result),
1236 __end_pair(__end, __result + (__end - __begin));
1240 __begin_pair, __end_pair, __unary_op, __functionality,
1242 __dummy, __dummy, -1, __parallelism_tag);
1246 return transform(__begin, __end, __result, __unary_op,
1251 template<
typename _RAIter1,
typename _RAIter2,
1252 typename _UnaryOperation,
typename _IteratorTag1,
1253 typename _IteratorTag2>
1255 __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
1256 _RAIter2 __result, _UnaryOperation __unary_op,
1257 _IteratorTag1, _IteratorTag2)
1258 {
return transform(__begin, __end, __result, __unary_op,
1262 template<
typename _IIter,
typename _OutputIterator,
1263 typename _UnaryOperation>
1264 inline _OutputIterator
1265 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1266 _UnaryOperation __unary_op,
1269 typedef std::iterator_traits<_IIter> _IIterTraits;
1270 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
1271 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
1272 typedef typename _OIterTraits::iterator_category _OIterCategory;
1274 return __transform1_switch(__begin, __end, __result, __unary_op,
1275 _IIteratorCategory(), _OIterCategory(),
1279 template<
typename _IIter,
typename _OutputIterator,
1280 typename _UnaryOperation>
1281 inline _OutputIterator
1282 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1283 _UnaryOperation __unary_op)
1285 typedef std::iterator_traits<_IIter> _IIterTraits;
1286 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
1287 typedef typename _IIterTraits::iterator_category _IIteratorCategory;
1288 typedef typename _OIterTraits::iterator_category _OIterCategory;
1290 return __transform1_switch(__begin, __end, __result, __unary_op,
1291 _IIteratorCategory(), _OIterCategory());
1296 template<
typename _IIter1,
typename _IIter2,
1297 typename _OutputIterator,
typename _BinaryOperation>
1298 inline _OutputIterator
1299 transform(_IIter1 __begin1, _IIter1 __end1,
1300 _IIter2 __begin2, _OutputIterator __result,
1302 {
return _GLIBCXX_STD_A::transform(__begin1, __end1,
1303 __begin2, __result, __binary_op); }
1306 template<
typename _RAIter1,
typename _RAIter2,
1307 typename _RAIter3,
typename _BinaryOperation>
1309 __transform2_switch(_RAIter1 __begin1, _RAIter1 __end1,
1311 _RAIter3 __result, _BinaryOperation __binary_op,
1317 (__end1 - __begin1) >=
1319 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1321 bool __dummy =
true;
1325 _ItTrip __begin_triple(__begin1, __begin2, __result),
1326 __end_triple(__end1, __begin2 + (__end1 - __begin1),
1327 __result + (__end1 - __begin1));
1331 __binary_op, __functionality,
1333 __dummy, __dummy, -1,
1338 return transform(__begin1, __end1, __begin2, __result, __binary_op,
1343 template<
typename _IIter1,
typename _IIter2,
1344 typename _OutputIterator,
typename _BinaryOperation,
1345 typename _Tag1,
typename _Tag2,
typename _Tag3>
1346 inline _OutputIterator
1347 __transform2_switch(_IIter1 __begin1, _IIter1 __end1,
1348 _IIter2 __begin2, _OutputIterator __result,
1349 _BinaryOperation __binary_op, _Tag1, _Tag2, _Tag3)
1350 {
return transform(__begin1, __end1, __begin2, __result, __binary_op,
1354 template<
typename _IIter1,
typename _IIter2,
1355 typename _OutputIterator,
typename _BinaryOperation>
1356 inline _OutputIterator
1357 transform(_IIter1 __begin1, _IIter1 __end1,
1358 _IIter2 __begin2, _OutputIterator __result,
1359 _BinaryOperation __binary_op,
1362 typedef std::iterator_traits<_IIter1> _IIterTraits1;
1363 typedef typename _IIterTraits1::iterator_category
1365 typedef std::iterator_traits<_IIter2> _IIterTraits2;
1366 typedef typename _IIterTraits2::iterator_category
1368 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
1369 typedef typename _OIterTraits::iterator_category _OIterCategory;
1371 return __transform2_switch(
1372 __begin1, __end1, __begin2, __result, __binary_op,
1373 _IIterCategory1(), _IIterCategory2(), _OIterCategory(),
1377 template<
typename _IIter1,
typename _IIter2,
1378 typename _OutputIterator,
typename _BinaryOperation>
1379 inline _OutputIterator
1380 transform(_IIter1 __begin1, _IIter1 __end1,
1381 _IIter2 __begin2, _OutputIterator __result,
1382 _BinaryOperation __binary_op)
1384 typedef std::iterator_traits<_IIter1> _IIterTraits1;
1385 typedef typename _IIterTraits1::iterator_category
1387 typedef std::iterator_traits<_IIter2> _IIterTraits2;
1388 typedef typename _IIterTraits2::iterator_category
1390 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
1391 typedef typename _OIterTraits::iterator_category _OIterCategory;
1393 return __transform2_switch(
1394 __begin1, __end1, __begin2, __result, __binary_op,
1395 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
1399 template<
typename _FIterator,
typename _Tp>
1401 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1403 { _GLIBCXX_STD_A::replace(__begin, __end, __old_value, __new_value); }
1406 template<
typename _FIterator,
typename _Tp,
typename _IteratorTag>
1408 __replace_switch(_FIterator __begin, _FIterator __end,
1409 const _Tp& __old_value,
const _Tp& __new_value,
1411 { replace(__begin, __end, __old_value, __new_value,
1415 template<
typename _RAIter,
typename _Tp>
1417 __replace_switch(_RAIter __begin, _RAIter __end,
1418 const _Tp& __old_value,
const _Tp& __new_value,
1423 replace(__begin, __end, __old_value, __new_value,
1428 template<
typename _FIterator,
typename _Tp>
1430 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1431 const _Tp& __new_value,
1434 typedef iterator_traits<_FIterator> _TraitsType;
1435 typedef typename _TraitsType::iterator_category _IteratorCategory;
1436 __replace_switch(__begin, __end, __old_value, __new_value,
1437 _IteratorCategory(),
1441 template<
typename _FIterator,
typename _Tp>
1443 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1444 const _Tp& __new_value)
1446 typedef iterator_traits<_FIterator> _TraitsType;
1447 typedef typename _TraitsType::iterator_category _IteratorCategory;
1448 __replace_switch(__begin, __end, __old_value, __new_value,
1449 _IteratorCategory());
1454 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1456 replace_if(_FIterator __begin, _FIterator __end, _Predicate __pred,
1458 { _GLIBCXX_STD_A::replace_if(__begin, __end, __pred, __new_value); }
1461 template<
typename _FIterator,
typename _Predicate,
typename _Tp,
1462 typename _IteratorTag>
1464 __replace_if_switch(_FIterator __begin, _FIterator __end,
1465 _Predicate __pred,
const _Tp& __new_value, _IteratorTag)
1466 { replace_if(__begin, __end, __pred, __new_value,
1470 template<
typename _RAIter,
typename _Predicate,
typename _Tp>
1472 __replace_if_switch(_RAIter __begin, _RAIter __end,
1473 _Predicate __pred,
const _Tp& __new_value,
1478 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1480 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1485 __functionality(__new_value);
1488 __begin, __end, __pred, __functionality,
1490 true, __dummy, -1, __parallelism_tag);
1493 replace_if(__begin, __end, __pred, __new_value,
1498 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1500 replace_if(_FIterator __begin, _FIterator __end,
1501 _Predicate __pred,
const _Tp& __new_value,
1504 typedef std::iterator_traits<_FIterator> _IteratorTraits;
1505 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1506 __replace_if_switch(__begin, __end, __pred, __new_value,
1507 _IteratorCategory(), __parallelism_tag);
1510 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1512 replace_if(_FIterator __begin, _FIterator __end,
1513 _Predicate __pred,
const _Tp& __new_value)
1515 typedef std::iterator_traits<_FIterator> _IteratorTraits;
1516 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1517 __replace_if_switch(__begin, __end, __pred, __new_value,
1518 _IteratorCategory());
1522 template<
typename _FIterator,
typename _Generator>
1524 generate(_FIterator __begin, _FIterator __end, _Generator __gen,
1526 { _GLIBCXX_STD_A::generate(__begin, __end, __gen); }
1529 template<
typename _FIterator,
typename _Generator,
typename _IteratorTag>
1531 __generate_switch(_FIterator __begin, _FIterator __end, _Generator __gen,
1536 template<
typename _RAIter,
typename _Generator>
1538 __generate_switch(_RAIter __begin, _RAIter __end,
1543 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1545 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1552 __begin, __end, __gen, __functionality,
1554 true, __dummy, -1, __parallelism_tag);
1561 template<
typename _FIterator,
typename _Generator>
1563 generate(_FIterator __begin, _FIterator __end,
1566 typedef std::iterator_traits<_FIterator> _IteratorTraits;
1567 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1568 __generate_switch(__begin, __end, __gen, _IteratorCategory(),
1572 template<
typename _FIterator,
typename _Generator>
1574 generate(_FIterator __begin, _FIterator __end, _Generator __gen)
1576 typedef std::iterator_traits<_FIterator> _IteratorTraits;
1577 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1578 __generate_switch(__begin, __end, __gen, _IteratorCategory());
1583 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1584 inline _OutputIterator
1585 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen,
1587 {
return _GLIBCXX_STD_A::generate_n(__begin, __n, __gen); }
1590 template<
typename _OutputIterator,
typename _Size,
typename _Generator,
1591 typename _IteratorTag>
1592 inline _OutputIterator
1593 __generate_n_switch(_OutputIterator __begin, _Size __n, _Generator __gen,
1595 {
return generate_n(__begin, __n, __gen,
1599 template<
typename _RAIter,
typename _Size,
typename _Generator>
1601 __generate_n_switch(_RAIter __begin, _Size __n, _Generator __gen,
1610 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1611 inline _OutputIterator
1612 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen,
1615 typedef std::iterator_traits<_OutputIterator> _IteratorTraits;
1616 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1617 return __generate_n_switch(__begin, __n, __gen, _IteratorCategory(),
1621 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1622 inline _OutputIterator
1623 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen)
1625 typedef std::iterator_traits<_OutputIterator> _IteratorTraits;
1626 typedef typename _IteratorTraits::iterator_category _IteratorCategory;
1627 return __generate_n_switch(__begin, __n, __gen, _IteratorCategory());
1632 template<
typename _RAIter>
1634 random_shuffle(_RAIter __begin, _RAIter __end,
1636 { _GLIBCXX_STD_A::random_shuffle(__begin, __end); }
1639 template<
typename _RAIter,
typename _RandomNumberGenerator>
1641 random_shuffle(_RAIter __begin, _RAIter __end,
1642 _RandomNumberGenerator& __rand,
1644 { _GLIBCXX_STD_A::random_shuffle(__begin, __end, __rand); }
1648 template<
typename _MustBeInt =
int>
1652 operator()(
int __limit)
1653 {
return rand() % __limit; }
1657 template<
typename _RAIter>
1659 random_shuffle(_RAIter __begin, _RAIter __end)
1663 __gnu_parallel::random_shuffle(__begin, __end, __r);
1667 template<
typename _RAIter,
typename _RandomNumberGenerator>
1669 random_shuffle(_RAIter __begin, _RAIter __end,
1670 #
if __cplusplus >= 201103L
1671 _RandomNumberGenerator&& __rand)
1673 _RandomNumberGenerator& __rand)
1676 if (__begin == __end)
1679 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1687 template<
typename _FIterator,
typename _Predicate>
1689 partition(_FIterator __begin, _FIterator __end,
1691 {
return _GLIBCXX_STD_A::partition(__begin, __end, __pred); }
1694 template<
typename _FIterator,
typename _Predicate,
typename _IteratorTag>
1696 __partition_switch(_FIterator __begin, _FIterator __end,
1697 _Predicate __pred, _IteratorTag)
1698 {
return partition(__begin, __end, __pred,
1702 template<
typename _RAIter,
typename _Predicate>
1704 __partition_switch(_RAIter __begin, _RAIter __end,
1705 _Predicate __pred, random_access_iterator_tag)
1708 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
1711 typedef typename std::iterator_traits<_RAIter>::
1712 difference_type _DifferenceType;
1715 __gnu_parallel::__get_max_threads());
1716 return __begin + __middle;
1719 return partition(__begin, __end, __pred,
1724 template<
typename _FIterator,
typename _Predicate>
1726 partition(_FIterator __begin, _FIterator __end, _Predicate __pred)
1728 typedef iterator_traits<_FIterator> _TraitsType;
1729 typedef typename _TraitsType::iterator_category _IteratorCategory;
1730 return __partition_switch(__begin, __end, __pred, _IteratorCategory());
1736 template<
typename _RAIter>
1738 sort(_RAIter __begin, _RAIter __end,
1740 { _GLIBCXX_STD_A::sort(__begin, __end); }
1743 template<
typename _RAIter,
typename _Compare>
1745 sort(_RAIter __begin, _RAIter __end, _Compare __comp,
1747 { _GLIBCXX_STD_A::sort<_RAIter, _Compare>(__begin, __end,
1751 template<
typename _RAIter,
typename _Compare,
1754 sort(_RAIter __begin, _RAIter __end, _Compare __comp,
1757 typedef iterator_traits<_RAIter> _TraitsType;
1758 typedef typename _TraitsType::value_type _ValueType;
1760 if (__begin != __end)
1763 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin) >=
1765 __gnu_parallel::__parallel_sort<false>(
1766 __begin, __end, __comp, __parallelism);
1773 template<
typename _RAIter>
1775 sort(_RAIter __begin, _RAIter __end)
1777 typedef iterator_traits<_RAIter> _TraitsType;
1778 typedef typename _TraitsType::value_type _ValueType;
1784 template<
typename _RAIter>
1786 sort(_RAIter __begin, _RAIter __end,
1789 typedef iterator_traits<_RAIter> _TraitsType;
1790 typedef typename _TraitsType::value_type _ValueType;
1795 template<
typename _RAIter>
1797 sort(_RAIter __begin, _RAIter __end,
1800 typedef iterator_traits<_RAIter> _TraitsType;
1801 typedef typename _TraitsType::value_type _ValueType;
1806 template<
typename _RAIter>
1808 sort(_RAIter __begin, _RAIter __end,
1811 typedef iterator_traits<_RAIter> _TraitsType;
1812 typedef typename _TraitsType::value_type _ValueType;
1817 template<
typename _RAIter>
1819 sort(_RAIter __begin, _RAIter __end,
1822 typedef iterator_traits<_RAIter> _TraitsType;
1823 typedef typename _TraitsType::value_type _ValueType;
1828 template<
typename _RAIter>
1830 sort(_RAIter __begin, _RAIter __end,
1833 typedef iterator_traits<_RAIter> _TraitsType;
1834 typedef typename _TraitsType::value_type _ValueType;
1839 template<
typename _RAIter>
1841 sort(_RAIter __begin, _RAIter __end,
1844 typedef iterator_traits<_RAIter> _TraitsType;
1845 typedef typename _TraitsType::value_type _ValueType;
1850 template<
typename _RAIter>
1852 sort(_RAIter __begin, _RAIter __end,
1855 typedef iterator_traits<_RAIter> _TraitsType;
1856 typedef typename _TraitsType::value_type _ValueType;
1861 template<
typename _RAIter,
typename _Compare>
1863 sort(_RAIter __begin, _RAIter __end, _Compare __comp)
1865 typedef iterator_traits<_RAIter> _TraitsType;
1866 typedef typename _TraitsType::value_type _ValueType;
1875 template<
typename _RAIter>
1877 stable_sort(_RAIter __begin, _RAIter __end,
1879 { _GLIBCXX_STD_A::stable_sort(__begin, __end); }
1882 template<
typename _RAIter,
typename _Compare>
1884 stable_sort(_RAIter __begin, _RAIter __end,
1886 { _GLIBCXX_STD_A::stable_sort<_RAIter, _Compare>(
1887 __begin, __end, __comp); }
1890 template<
typename _RAIter,
typename _Compare,
1893 stable_sort(_RAIter __begin, _RAIter __end,
1896 typedef iterator_traits<_RAIter> _TraitsType;
1897 typedef typename _TraitsType::value_type _ValueType;
1899 if (__begin != __end)
1902 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin) >=
1904 __gnu_parallel::__parallel_sort<true>(
1905 __begin, __end, __comp, __parallelism);
1907 stable_sort(__begin, __end, __comp,
1913 template<
typename _RAIter>
1915 stable_sort(_RAIter __begin, _RAIter __end)
1917 typedef iterator_traits<_RAIter> _TraitsType;
1918 typedef typename _TraitsType::value_type _ValueType;
1924 template<
typename _RAIter>
1926 stable_sort(_RAIter __begin, _RAIter __end,
1929 typedef iterator_traits<_RAIter> _TraitsType;
1930 typedef typename _TraitsType::value_type _ValueType;
1935 template<
typename _RAIter>
1937 stable_sort(_RAIter __begin, _RAIter __end,
1940 typedef iterator_traits<_RAIter> _TraitsType;
1941 typedef typename _TraitsType::value_type _ValueType;
1946 template<
typename _RAIter>
1948 stable_sort(_RAIter __begin, _RAIter __end,
1951 typedef iterator_traits<_RAIter> _TraitsType;
1952 typedef typename _TraitsType::value_type _ValueType;
1957 template<
typename _RAIter>
1959 stable_sort(_RAIter __begin, _RAIter __end,
1962 typedef iterator_traits<_RAIter> _TraitsType;
1963 typedef typename _TraitsType::value_type _ValueType;
1968 template<
typename _RAIter>
1970 stable_sort(_RAIter __begin, _RAIter __end,
1973 typedef iterator_traits<_RAIter> _TraitsType;
1974 typedef typename _TraitsType::value_type _ValueType;
1979 template<
typename _RAIter,
typename _Compare>
1981 stable_sort(_RAIter __begin, _RAIter __end,
1984 typedef iterator_traits<_RAIter> _TraitsType;
1985 typedef typename _TraitsType::value_type _ValueType;
1991 template<
typename _IIter1,
typename _IIter2,
1992 typename _OutputIterator>
1993 inline _OutputIterator
1994 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
1995 _IIter2 __end2, _OutputIterator __result,
1997 {
return _GLIBCXX_STD_A::merge(
1998 __begin1, __end1, __begin2, __end2, __result); }
2001 template<
typename _IIter1,
typename _IIter2,
2002 typename _OutputIterator,
typename _Compare>
2003 inline _OutputIterator
2004 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
2005 _IIter2 __end2, _OutputIterator __result, _Compare __comp,
2007 {
return _GLIBCXX_STD_A::merge(
2008 __begin1, __end1, __begin2, __end2, __result, __comp); }
2011 template<
typename _IIter1,
typename _IIter2,
typename _OutputIterator,
2012 typename _Compare,
typename _IteratorTag1,
2013 typename _IteratorTag2,
typename _IteratorTag3>
2014 inline _OutputIterator
2015 __merge_switch(_IIter1 __begin1, _IIter1 __end1,
2016 _IIter2 __begin2, _IIter2 __end2,
2017 _OutputIterator __result, _Compare __comp,
2018 _IteratorTag1, _IteratorTag2, _IteratorTag3)
2019 {
return _GLIBCXX_STD_A::merge(__begin1, __end1, __begin2, __end2,
2020 __result, __comp); }
2023 template<
typename _IIter1,
typename _IIter2,
2024 typename _OutputIterator,
typename _Compare>
2026 __merge_switch(_IIter1 __begin1, _IIter1 __end1,
2027 _IIter2 __begin2, _IIter2 __end2,
2028 _OutputIterator __result, _Compare __comp,
2029 random_access_iterator_tag, random_access_iterator_tag,
2030 random_access_iterator_tag)
2033 (static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
2035 || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
2038 __begin1, __end1, __begin2, __end2, __result,
2039 (__end1 - __begin1) + (__end2 - __begin2), __comp);
2042 __begin1, __end1, __begin2, __end2, __result,
2043 (__end1 - __begin1) + (__end2 - __begin2), __comp);
2047 template<
typename _IIter1,
typename _IIter2,
2048 typename _OutputIterator,
typename _Compare>
2049 inline _OutputIterator
2050 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
2051 _IIter2 __end2, _OutputIterator __result, _Compare __comp)
2053 typedef typename iterator_traits<_IIter1>::value_type _ValueType;
2055 typedef std::iterator_traits<_IIter1> _IIterTraits1;
2056 typedef std::iterator_traits<_IIter2> _IIterTraits2;
2057 typedef std::iterator_traits<_OutputIterator> _OIterTraits;
2058 typedef typename _IIterTraits1::iterator_category
2060 typedef typename _IIterTraits2::iterator_category
2062 typedef typename _OIterTraits::iterator_category _OIterCategory;
2064 return __merge_switch(
2065 __begin1, __end1, __begin2, __end2, __result, __comp,
2066 _IIterCategory1(), _IIterCategory2(), _OIterCategory());
2071 template<
typename _IIter1,
typename _IIter2,
2072 typename _OutputIterator>
2073 inline _OutputIterator
2074 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
2075 _IIter2 __end2, _OutputIterator __result)
2077 typedef std::iterator_traits<_IIter1> _Iterator1Traits;
2078 typedef std::iterator_traits<_IIter2> _Iterator2Traits;
2079 typedef typename _Iterator1Traits::value_type _ValueType1;
2080 typedef typename _Iterator2Traits::value_type _ValueType2;
2082 return __gnu_parallel::merge(__begin1, __end1, __begin2, __end2,
2087 template<
typename _RAIter>
2089 nth_element(_RAIter __begin, _RAIter __nth,
2091 {
return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end); }
2094 template<
typename _RAIter,
typename _Compare>
2096 nth_element(_RAIter __begin, _RAIter __nth,
2097 _RAIter __end, _Compare __comp,
2099 {
return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end, __comp); }
2102 template<
typename _RAIter,
typename _Compare>
2104 nth_element(_RAIter __begin, _RAIter __nth,
2105 _RAIter __end, _Compare __comp)
2108 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
2112 nth_element(__begin, __nth, __end, __comp,
2117 template<
typename _RAIter>
2119 nth_element(_RAIter __begin, _RAIter __nth,
2122 typedef iterator_traits<_RAIter> _TraitsType;
2123 typedef typename _TraitsType::value_type _ValueType;
2124 __gnu_parallel::nth_element(__begin, __nth, __end,
2129 template<
typename _RAIter,
typename _Compare>
2131 partial_sort(_RAIter __begin, _RAIter __middle,
2132 _RAIter __end, _Compare __comp,
2134 { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end, __comp); }
2137 template<
typename _RAIter>
2139 partial_sort(_RAIter __begin, _RAIter __middle,
2141 { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end); }
2144 template<
typename _RAIter,
typename _Compare>
2146 partial_sort(_RAIter __begin, _RAIter __middle,
2147 _RAIter __end, _Compare __comp)
2150 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
2155 partial_sort(__begin, __middle, __end, __comp,
2160 template<
typename _RAIter>
2162 partial_sort(_RAIter __begin, _RAIter __middle,
2165 typedef iterator_traits<_RAIter> _TraitsType;
2166 typedef typename _TraitsType::value_type _ValueType;
2167 __gnu_parallel::partial_sort(__begin, __middle, __end,
2172 template<
typename _FIterator>
2174 max_element(_FIterator __begin, _FIterator __end,
2176 {
return _GLIBCXX_STD_A::max_element(__begin, __end); }
2179 template<
typename _FIterator,
typename _Compare>
2181 max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2183 {
return _GLIBCXX_STD_A::max_element(__begin, __end, __comp); }
2186 template<
typename _FIterator,
typename _Compare,
typename _IteratorTag>
2188 __max_element_switch(_FIterator __begin, _FIterator __end,
2189 _Compare __comp, _IteratorTag)
2190 {
return max_element(__begin, __end, __comp,
2194 template<
typename _RAIter,
typename _Compare>
2196 __max_element_switch(_RAIter __begin, _RAIter __end,
2197 _Compare __comp, random_access_iterator_tag,
2201 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
2203 && __gnu_parallel::__is_parallel(__parallelism_tag)))
2205 _RAIter __res(__begin);
2212 __res, __res, -1, __parallelism_tag);
2216 return max_element(__begin, __end, __comp,
2221 template<
typename _FIterator>
2223 max_element(_FIterator __begin, _FIterator __end,
2226 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2231 template<
typename _FIterator>
2233 max_element(_FIterator __begin, _FIterator __end)
2235 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2236 return __gnu_parallel::max_element(__begin, __end,
2241 template<
typename _FIterator,
typename _Compare>
2243 max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2246 typedef iterator_traits<_FIterator> _TraitsType;
2247 typedef typename _TraitsType::iterator_category _IteratorCategory;
2248 return __max_element_switch(__begin, __end, __comp, _IteratorCategory(),
2252 template<
typename _FIterator,
typename _Compare>
2254 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());
2263 template<
typename _FIterator>
2265 min_element(_FIterator __begin, _FIterator __end,
2267 {
return _GLIBCXX_STD_A::min_element(__begin, __end); }
2270 template<
typename _FIterator,
typename _Compare>
2272 min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2274 {
return _GLIBCXX_STD_A::min_element(__begin, __end, __comp); }
2277 template<
typename _FIterator,
typename _Compare,
typename _IteratorTag>
2279 __min_element_switch(_FIterator __begin, _FIterator __end,
2280 _Compare __comp, _IteratorTag)
2281 {
return min_element(__begin, __end, __comp,
2285 template<
typename _RAIter,
typename _Compare>
2287 __min_element_switch(_RAIter __begin, _RAIter __end,
2288 _Compare __comp, random_access_iterator_tag,
2292 static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
2294 && __gnu_parallel::__is_parallel(__parallelism_tag)))
2296 _RAIter __res(__begin);
2303 __res, __res, -1, __parallelism_tag);
2307 return min_element(__begin, __end, __comp,
2312 template<
typename _FIterator>
2314 min_element(_FIterator __begin, _FIterator __end,
2317 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2322 template<
typename _FIterator>
2324 min_element(_FIterator __begin, _FIterator __end)
2326 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2327 return __gnu_parallel::min_element(__begin, __end,
2332 template<
typename _FIterator,
typename _Compare>
2334 min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2337 typedef iterator_traits<_FIterator> _TraitsType;
2338 typedef typename _TraitsType::iterator_category _IteratorCategory;
2339 return __min_element_switch(__begin, __end, __comp, _IteratorCategory(),
2343 template<
typename _FIterator,
typename _Compare>
2345 min_element(_FIterator __begin, _FIterator __end, _Compare __comp)
2347 typedef iterator_traits<_FIterator> _TraitsType;
2348 typedef typename _TraitsType::iterator_category _IteratorCategory;
2349 return __min_element_switch(__begin, __end, __comp, _IteratorCategory());
Parallel implementations of std::unique_copy(). This file is a GNU parallel extension to the Standard...
Parallel sorting algorithm switch. This file is a GNU parallel extension to the Standard C++ Library...
Reduction for finding the maximum element, using a comparator.
Forces parallel sorting using multiway mergesort with exact splitting at compile time.
std::transform() __selector, two input sequences variant.
Parallelization of embarrassingly parallel execution by means of work-stealing.
Parallel implementation base for std::find(), std::equal() and related functions. This file is a GNU ...
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 implementation of std::merge(). This file is a GNU parallel extension to the Standard C++ Li...
Forces sequential execution at compile time.
std::pair< _RAIter1, _RAIter2 > __find_template(_RAIter1 __begin1, _RAIter1 __end1, _RAIter2 __begin2, _Pred __pred, _Selector __selector)
Parallel std::find, switch for different algorithms.
Forces parallel sorting using unbalanced quicksort at compile time.
#define _GLIBCXX_PARALLEL_CONDITION(__c)
Determine at compile(?)-time if the parallel variant of an algorithm should be called.
Similar to std::binder2nd, but giving the argument types explicitly.
iterator begin() const
Begin iterator.
Test predicate on a single element, used for std::find() and std::find_if ().
Helper iterator classes for the std::transform() functions. This file is a GNU parallel extension to ...
uint64_t _SequenceIndex
Unsigned integer to index __elements. The total number of elements for each algorithm must fit into t...
_Parallelism
Run-time equivalents for the compile-time tags.
_OutputIterator __parallel_unique_copy(_IIter __first, _IIter __last, _OutputIterator __result, _BinaryPredicate __binary_pred)
Parallel std::unique_copy(), w/__o explicit equality predicate.
Parallelization of embarrassingly parallel execution by means of equal splitting. This file is a GNU ...
Similar to std::equal_to, but allows two different types.
Recommends parallel execution at compile time, optionally using a user-specified number of threads...
Similar to std::less, but allows two different types.
ISO C++ entities toplevel namespace is std.
A triple of iterators. The usual iterator operations are applied to all three child iterators...
Test predicate on several elements.
Forces parallel sorting using multiway mergesort at compile time.
Functor wrapper for std::rand().
One of the comparison functors.
_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.
__RAIter1 __search_template(__RAIter1 __begin1, __RAIter1 __end1, __RAIter2 __begin2, __RAIter2 __end2, _Pred __pred)
Parallel std::search.
Functors representing different tasks to be plugged into the generic parallelization methods for emba...
Parallel implementations of set operations for random-access iterators. This file is a GNU parallel e...
Parallel implementation of std::partition(), std::nth_element(), and std::partial_sort(). This file is a GNU parallel extension to the Standard C++ Library.
Sequence that conceptually consists of multiple copies of the same element. The copies are not stored...
One of the math functors.
GNU parallel code for public use.
A pair of iterators. The usual iterator operations are applied to both child iterators.
static const _Settings & get()
Get the global settings.
Parallel implementation of std::random_shuffle(). This file is a GNU parallel extension to the Standa...
std::generate() selector.
std::iterator_traits< _RAIter >::difference_type __parallel_partition(_RAIter __begin, _RAIter __end, _Predicate __pred, _ThreadIndex __num_threads)
Parallel implementation of std::partition.
Forces parallel sorting using multiway mergesort with splitting by sampling at compile time...
Random-access iterators support a superset of bidirectional iterator operations.
Selector that just returns the passed iterator.
_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...
Test predicate on two adjacent elements.
Parallelization of embarrassingly parallel execution by means of an OpenMP for loop with static sched...
void __parallel_random_shuffle(_RAIter __begin, _RAIter __end, _RandomNumberGenerator __rng=_RandomNumber())
Parallel random public call.
Reduction for finding the maximum element, using a comparator.
void __sequential_random_shuffle(_RAIter __begin, _RAIter __end, _RandomNumberGenerator &__rng)
Sequential cache-efficient random shuffle.
_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::count_if () selector.
void __parallel_partial_sort(_RAIter __begin, _RAIter __middle, _RAIter __end, _Compare __comp)
Parallel implementation of std::partial_sort().
Recommends parallel execution using the default parallel algorithm.
_It _M_finish_iterator
_Iterator on last element processed; needed for some algorithms (e. g. std::transform()).
_Function objects representing different tasks to be plugged into the parallel find algorithm...
void __parallel_nth_element(_RAIter __begin, _RAIter __nth, _RAIter __end, _Compare __comp)
Parallel implementation of std::nth_element().
One of the comparison functors.
iterator end() const
End iterator.
std::for_each() selector.
std::transform() __selector, one input sequence variant.
Parallel implementation base for std::search() and std::search_n(). This file is a GNU parallel exten...
Forces parallel sorting using balanced quicksort at compile time.
Sequential helper functions. This file is a GNU parallel extension to the Standard C++ Library...
Main interface for embarrassingly parallel functions.
Reduction function doing nothing.