66 template<
typename _IIter,
typename _Function>
70 {
return _GLIBCXX_STD_A::for_each(__begin, __end, __f); }
73 template<
typename _IIter,
typename _Function,
typename _IteratorTag>
80 template<
typename _RAIter,
typename _Function>
82 __for_each_switch(_RAIter __begin, _RAIter __end,
105 template<
typename _Iterator,
typename _Function>
107 for_each(_Iterator __begin, _Iterator __end,
_Function __f,
110 return __for_each_switch(__begin, __end, __f,
115 template<
typename _Iterator,
typename _Function>
117 for_each(_Iterator __begin, _Iterator __end,
_Function __f)
119 return __for_each_switch(__begin, __end, __f,
124 template<
typename _IIter,
typename _Tp>
128 {
return _GLIBCXX_STD_A::find(__begin, __end, __val); }
131 template<
typename _IIter,
typename _Tp,
typename _IteratorTag>
133 __find_switch(
_IIter __begin,
_IIter __end,
const _Tp& __val,
135 {
return _GLIBCXX_STD_A::find(__begin, __end, __val); }
138 template<
typename _RAIter,
typename _Tp>
140 __find_switch(_RAIter __begin, _RAIter __end,
144 typedef typename _TraitsType::value_type _ValueType;
150 _ValueType,
const _Tp&,
bool>
153 __begin, __end, __begin, __comp,
157 return _GLIBCXX_STD_A::find(__begin, __end, __val);
161 template<
typename _IIter,
typename _Tp>
165 return __find_switch(__begin, __end, __val,
170 template<
typename _IIter,
typename _Predicate>
174 {
return _GLIBCXX_STD_A::find_if(__begin, __end,
__pred); }
177 template<
typename _IIter,
typename _Predicate,
typename _IteratorTag>
181 {
return _GLIBCXX_STD_A::find_if(__begin, __end,
__pred); }
184 template<
typename _RAIter,
typename _Predicate>
186 __find_if_switch(_RAIter __begin, _RAIter __end,
192 __find_if_selector()).first;
194 return _GLIBCXX_STD_A::find_if(__begin, __end,
__pred);
198 template<
typename _IIter,
typename _Predicate>
202 return __find_if_switch(__begin, __end,
__pred,
207 template<
typename _IIter,
typename _FIterator>
217 template<
typename _IIter,
typename _FIterator,
223 {
return _GLIBCXX_STD_A::find_first_of(
227 template<
typename _IIter,
typename _FIterator,
237 template<
typename _RAIter,
typename _FIterator,
240 __find_first_of_switch(_RAIter
__begin1,
253 template<
typename _IIter,
typename _FIterator,
264 template<
typename _IIter,
typename _FIterator,
277 template<
typename _IIter,
typename _FIterator>
290 template<
typename _IIter,
typename _OutputIterator>
291 inline _OutputIterator
297 template<
typename _IIter,
typename _OutputIterator,
299 inline _OutputIterator
305 template<
typename _IIter,
typename _OutputIterator,
307 inline _OutputIterator
311 {
return _GLIBCXX_STD_A::unique_copy(__begin, __last,
__out,
__pred); }
317 __unique_copy_switch(_RAIter __begin, _RAIter __last,
327 return _GLIBCXX_STD_A::unique_copy(__begin, __last,
__out,
__pred);
331 template<
typename _IIter,
typename _OutputIterator>
332 inline _OutputIterator
337 return __unique_copy_switch(
344 template<
typename _IIter,
typename _OutputIterator,
typename _Predicate>
345 inline _OutputIterator
349 return __unique_copy_switch(
357 typename _OutputIterator>
358 inline _OutputIterator
362 {
return _GLIBCXX_STD_A::set_union(
367 typename _OutputIterator,
typename _Predicate>
368 inline _OutputIterator
380 inline _OutputIterator
383 _OutputIterator __result, _Predicate
__pred,
403 return __gnu_parallel::__parallel_set_union(
412 typename _OutputIterator>
413 inline _OutputIterator
420 return __set_union_switch(
430 typename _OutputIterator,
typename _Predicate>
431 inline _OutputIterator
436 return __set_union_switch(
445 typename _OutputIterator>
446 inline _OutputIterator
455 typename _OutputIterator,
typename _Predicate>
456 inline _OutputIterator
461 {
return _GLIBCXX_STD_A::set_intersection(
466 typename _Predicate,
typename _OutputIterator,
469 inline _OutputIterator
472 _OutputIterator __result, _Predicate
__pred,
496 return __gnu_parallel::__parallel_set_intersection(
499 return _GLIBCXX_STD_A::set_intersection(
505 typename _OutputIterator>
506 inline _OutputIterator
509 _OutputIterator
__out)
514 return __set_intersection_switch(
523 typename _OutputIterator,
typename _Predicate>
524 inline _OutputIterator
529 return __set_intersection_switch(
538 typename _OutputIterator>
539 inline _OutputIterator
542 _OutputIterator
__out,
544 {
return _GLIBCXX_STD_A::set_symmetric_difference(
549 typename _OutputIterator,
typename _Predicate>
550 inline _OutputIterator
555 {
return _GLIBCXX_STD_A::set_symmetric_difference(
560 typename _Predicate,
typename _OutputIterator,
563 inline _OutputIterator
564 __set_symmetric_difference_switch(
566 _OutputIterator __result, _Predicate
__pred,
568 {
return _GLIBCXX_STD_A::set_symmetric_difference(
590 return __gnu_parallel::__parallel_set_symmetric_difference(
593 return _GLIBCXX_STD_A::set_symmetric_difference(
599 typename _OutputIterator>
600 inline _OutputIterator
603 _OutputIterator
__out)
608 return __set_symmetric_difference_switch(
618 typename _OutputIterator,
typename _Predicate>
619 inline _OutputIterator
624 return __set_symmetric_difference_switch(
633 typename _OutputIterator>
634 inline _OutputIterator
638 {
return _GLIBCXX_STD_A::set_difference(
643 typename _OutputIterator,
typename _Predicate>
644 inline _OutputIterator
656 inline _OutputIterator
659 _OutputIterator __result, _Predicate
__pred,
661 {
return _GLIBCXX_STD_A::set_difference(
682 return __gnu_parallel::__parallel_set_difference(
685 return _GLIBCXX_STD_A::set_difference(
691 typename _OutputIterator>
692 inline _OutputIterator
695 _OutputIterator
__out)
700 return __set_difference_switch(
710 typename _OutputIterator,
typename _Predicate>
711 inline _OutputIterator
716 return __set_difference_switch(
724 template<
typename _FIterator>
726 adjacent_find(_FIterator __begin, _FIterator __end,
728 {
return _GLIBCXX_STD_A::adjacent_find(__begin, __end); }
731 template<
typename _FIterator,
typename _BinaryPredicate>
733 adjacent_find(_FIterator __begin, _FIterator __end,
736 {
return _GLIBCXX_STD_A::adjacent_find(__begin, __end,
__binary_pred); }
739 template<
typename _RAIter>
741 __adjacent_find_switch(_RAIter __begin, _RAIter __end,
745 typedef typename _TraitsType::value_type _ValueType;
754 if (
__spot == (__end - 1))
764 template<
typename _FIterator,
typename _IteratorTag>
766 __adjacent_find_switch(_FIterator __begin, _FIterator __end,
771 template<
typename _FIterator>
773 adjacent_find(_FIterator __begin, _FIterator __end)
775 return __adjacent_find_switch(__begin, __end,
783 __adjacent_find_switch(_FIterator __begin, _FIterator __end,
785 {
return adjacent_find(__begin, __end,
__pred,
789 template<
typename _RAIter,
typename _BinaryPredicate>
791 __adjacent_find_switch(_RAIter __begin, _RAIter __end,
797 __adjacent_find_selector()).first;
799 return adjacent_find(__begin, __end,
__pred,
804 template<
typename _FIterator,
typename _BinaryPredicate>
806 adjacent_find(_FIterator __begin, _FIterator __end,
809 return __adjacent_find_switch(__begin, __end,
__pred,
814 template<
typename _IIter,
typename _Tp>
818 {
return _GLIBCXX_STD_A::count(__begin, __end, __value); }
821 template<
typename _RAIter,
typename _Tp>
823 __count_switch(_RAIter __begin, _RAIter __end,
828 typedef typename _TraitsType::value_type _ValueType;
829 typedef typename _TraitsType::difference_type _DifferenceType;
833 static_cast<_SequenceIndex
>(__end - __begin)
839 _DifferenceType
__res = 0;
848 return count(__begin, __end, __value,
853 template<
typename _IIter,
typename _Tp,
typename _IteratorTag>
855 __count_switch(
_IIter __begin,
_IIter __end,
const _Tp& __value,
861 template<
typename _IIter,
typename _Tp>
866 return __count_switch(__begin, __end, __value,
871 template<
typename _IIter,
typename _Tp>
875 return __count_switch(__begin, __end, __value,
881 template<
typename _IIter,
typename _Predicate>
885 {
return _GLIBCXX_STD_A::count_if(__begin, __end,
__pred); }
888 template<
typename _RAIter,
typename _Predicate>
890 __count_if_switch(_RAIter __begin, _RAIter __end,
895 typedef typename _TraitsType::value_type _ValueType;
896 typedef typename _TraitsType::difference_type _DifferenceType;
900 static_cast<_SequenceIndex
>(__end - __begin)
904 _DifferenceType
__res = 0;
906 __count_if_selector<_RAIter, _DifferenceType>
916 return count_if(__begin, __end,
__pred,
921 template<
typename _IIter,
typename _Predicate,
typename _IteratorTag>
925 {
return count_if(__begin, __end,
__pred,
929 template<
typename _IIter,
typename _Predicate>
934 return __count_if_switch(__begin, __end,
__pred,
939 template<
typename _IIter,
typename _Predicate>
943 return __count_if_switch(__begin, __end,
__pred,
949 template<
typename _FIterator1,
typename _FIterator2>
957 template<
typename _RAIter1,
typename _RAIter2>
989 template<
typename _FIterator1,
typename _FIterator2>
1006 {
return _GLIBCXX_STD_A::search(
1052#if __cplusplus >= 201703L
1060 template<
typename _ForwardIterator,
typename _Searcher>
1064 {
return __searcher(__first, __last).first; }
1068 template<
typename _FIterator,
typename _Integer,
typename _Tp>
1070 search_n(_FIterator __begin, _FIterator __end,
_Integer __count,
1072 {
return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val); }
1075 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1076 typename _BinaryPredicate>
1078 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1079 const _Tp& __val, _BinaryPredicate __binary_pred,
1081 {
return _GLIBCXX_STD_A::search_n(
1082 __begin, __end, __count, __val, __binary_pred); }
1085 template<
typename _FIterator,
typename _Integer,
typename _Tp>
1087 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1090 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
1091 return __gnu_parallel::search_n(__begin, __end, __count, __val,
1096 template<
typename _RAIter,
typename _Integer,
1097 typename _Tp,
typename _BinaryPredicate>
1099 __search_n_switch(_RAIter __begin, _RAIter __end, _Integer __count,
1100 const _Tp& __val, _BinaryPredicate __binary_pred,
1101 random_access_iterator_tag)
1109 __begin, __end, __ps.begin(), __ps.end(), __binary_pred);
1112 return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
1117 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1118 typename _BinaryPredicate,
typename _IteratorTag>
1120 __search_n_switch(_FIterator __begin, _FIterator __end, _Integer __count,
1121 const _Tp& __val, _BinaryPredicate __binary_pred,
1123 {
return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
1127 template<
typename _FIterator,
typename _Integer,
typename _Tp,
1128 typename _BinaryPredicate>
1130 search_n(_FIterator __begin, _FIterator __end, _Integer __count,
1131 const _Tp& __val, _BinaryPredicate __binary_pred)
1133 return __search_n_switch(__begin, __end, __count, __val, __binary_pred,
1139 template<
typename _IIter,
typename _OutputIterator,
1140 typename _UnaryOperation>
1141 inline _OutputIterator
1142 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1144 {
return _GLIBCXX_STD_A::transform(__begin, __end, __result, __unary_op); }
1147 template<
typename _RAIter1,
typename _RAIter2,
1148 typename _UnaryOperation>
1150 __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
1151 _RAIter2 __result, _UnaryOperation __unary_op,
1152 random_access_iterator_tag, random_access_iterator_tag,
1158 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1160 bool __dummy =
true;
1162 _RAIter2, random_access_iterator_tag> _ItTrip;
1163 _ItTrip __begin_pair(__begin, __result),
1164 __end_pair(__end, __result + (__end - __begin));
1168 __begin_pair, __end_pair, __unary_op, __functionality,
1170 __dummy, __dummy, -1, __parallelism_tag);
1174 return transform(__begin, __end, __result, __unary_op,
1179 template<
typename _RAIter1,
typename _RAIter2,
1180 typename _UnaryOperation,
typename _IteratorTag1,
1181 typename _IteratorTag2>
1183 __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
1184 _RAIter2 __result, _UnaryOperation __unary_op,
1185 _IteratorTag1, _IteratorTag2)
1186 {
return transform(__begin, __end, __result, __unary_op,
1190 template<
typename _IIter,
typename _OutputIterator,
1191 typename _UnaryOperation>
1192 inline _OutputIterator
1193 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1194 _UnaryOperation __unary_op,
1197 return __transform1_switch(__begin, __end, __result, __unary_op,
1203 template<
typename _IIter,
typename _OutputIterator,
1204 typename _UnaryOperation>
1205 inline _OutputIterator
1206 transform(_IIter __begin, _IIter __end, _OutputIterator __result,
1207 _UnaryOperation __unary_op)
1209 return __transform1_switch(__begin, __end, __result, __unary_op,
1216 template<
typename _IIter1,
typename _IIter2,
1217 typename _OutputIterator,
typename _BinaryOperation>
1218 inline _OutputIterator
1219 transform(_IIter1 __begin1, _IIter1 __end1,
1220 _IIter2 __begin2, _OutputIterator __result,
1222 {
return _GLIBCXX_STD_A::transform(__begin1, __end1,
1223 __begin2, __result, __binary_op); }
1226 template<
typename _RAIter1,
typename _RAIter2,
1227 typename _RAIter3,
typename _BinaryOperation>
1229 __transform2_switch(_RAIter1 __begin1, _RAIter1 __end1,
1231 _RAIter3 __result, _BinaryOperation __binary_op,
1232 random_access_iterator_tag, random_access_iterator_tag,
1233 random_access_iterator_tag,
1237 (__end1 - __begin1) >=
1239 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1241 bool __dummy =
true;
1244 random_access_iterator_tag> _ItTrip;
1245 _ItTrip __begin_triple(__begin1, __begin2, __result),
1246 __end_triple(__end1, __begin2 + (__end1 - __begin1),
1247 __result + (__end1 - __begin1));
1251 __binary_op, __functionality,
1253 __dummy, __dummy, -1,
1258 return transform(__begin1, __end1, __begin2, __result, __binary_op,
1263 template<
typename _IIter1,
typename _IIter2,
1264 typename _OutputIterator,
typename _BinaryOperation,
1265 typename _Tag1,
typename _Tag2,
typename _Tag3>
1266 inline _OutputIterator
1267 __transform2_switch(_IIter1 __begin1, _IIter1 __end1,
1268 _IIter2 __begin2, _OutputIterator __result,
1269 _BinaryOperation __binary_op, _Tag1, _Tag2, _Tag3)
1270 {
return transform(__begin1, __end1, __begin2, __result, __binary_op,
1274 template<
typename _IIter1,
typename _IIter2,
1275 typename _OutputIterator,
typename _BinaryOperation>
1276 inline _OutputIterator
1277 transform(_IIter1 __begin1, _IIter1 __end1,
1278 _IIter2 __begin2, _OutputIterator __result,
1279 _BinaryOperation __binary_op,
1282 return __transform2_switch(
1283 __begin1, __end1, __begin2, __result, __binary_op,
1290 template<
typename _IIter1,
typename _IIter2,
1291 typename _OutputIterator,
typename _BinaryOperation>
1292 inline _OutputIterator
1293 transform(_IIter1 __begin1, _IIter1 __end1,
1294 _IIter2 __begin2, _OutputIterator __result,
1295 _BinaryOperation __binary_op)
1297 return __transform2_switch(
1298 __begin1, __end1, __begin2, __result, __binary_op,
1305 template<
typename _FIterator,
typename _Tp>
1307 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1309 { _GLIBCXX_STD_A::replace(__begin, __end, __old_value, __new_value); }
1312 template<
typename _FIterator,
typename _Tp,
typename _IteratorTag>
1314 __replace_switch(_FIterator __begin, _FIterator __end,
1315 const _Tp& __old_value,
const _Tp& __new_value,
1317 { replace(__begin, __end, __old_value, __new_value,
1321 template<
typename _RAIter,
typename _Tp>
1323 __replace_switch(_RAIter __begin, _RAIter __end,
1324 const _Tp& __old_value,
const _Tp& __new_value,
1325 random_access_iterator_tag,
1329 replace(__begin, __end, __old_value, __new_value,
1334 template<
typename _FIterator,
typename _Tp>
1336 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1337 const _Tp& __new_value,
1340 __replace_switch(__begin, __end, __old_value, __new_value,
1345 template<
typename _FIterator,
typename _Tp>
1347 replace(_FIterator __begin, _FIterator __end,
const _Tp& __old_value,
1348 const _Tp& __new_value)
1350 __replace_switch(__begin, __end, __old_value, __new_value,
1356 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1358 replace_if(_FIterator __begin, _FIterator __end, _Predicate __pred,
1360 { _GLIBCXX_STD_A::replace_if(__begin, __end, __pred, __new_value); }
1363 template<
typename _FIterator,
typename _Predicate,
typename _Tp,
1364 typename _IteratorTag>
1366 __replace_if_switch(_FIterator __begin, _FIterator __end,
1367 _Predicate __pred,
const _Tp& __new_value, _IteratorTag)
1368 { replace_if(__begin, __end, __pred, __new_value,
1372 template<
typename _RAIter,
typename _Predicate,
typename _Tp>
1374 __replace_if_switch(_RAIter __begin, _RAIter __end,
1375 _Predicate __pred,
const _Tp& __new_value,
1376 random_access_iterator_tag,
1382 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1386 __replace_if_selector<_RAIter, _Predicate, _Tp>
1387 __functionality(__new_value);
1390 __begin, __end, __pred, __functionality,
1392 true, __dummy, -1, __parallelism_tag);
1395 replace_if(__begin, __end, __pred, __new_value,
1400 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1402 replace_if(_FIterator __begin, _FIterator __end,
1403 _Predicate __pred,
const _Tp& __new_value,
1406 __replace_if_switch(__begin, __end, __pred, __new_value,
1411 template<
typename _FIterator,
typename _Predicate,
typename _Tp>
1413 replace_if(_FIterator __begin, _FIterator __end,
1414 _Predicate __pred,
const _Tp& __new_value)
1416 __replace_if_switch(__begin, __end, __pred, __new_value,
1421 template<
typename _FIterator,
typename _Generator>
1423 generate(_FIterator __begin, _FIterator __end, _Generator __gen,
1425 { _GLIBCXX_STD_A::generate(__begin, __end, __gen); }
1428 template<
typename _FIterator,
typename _Generator,
typename _IteratorTag>
1430 __generate_switch(_FIterator __begin, _FIterator __end, _Generator __gen,
1435 template<
typename _RAIter,
typename _Generator>
1437 __generate_switch(_RAIter __begin, _RAIter __end,
1438 _Generator __gen, random_access_iterator_tag,
1444 && __gnu_parallel::__is_parallel(__parallelism_tag)))
1451 __begin, __end, __gen, __functionality,
1453 true, __dummy, -1, __parallelism_tag);
1460 template<
typename _FIterator,
typename _Generator>
1462 generate(_FIterator __begin, _FIterator __end,
1465 __generate_switch(__begin, __end, __gen,
1470 template<
typename _FIterator,
typename _Generator>
1472 generate(_FIterator __begin, _FIterator __end, _Generator __gen)
1474 __generate_switch(__begin, __end, __gen,
1480 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1481 inline _OutputIterator
1482 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen,
1484 {
return _GLIBCXX_STD_A::generate_n(__begin, __n, __gen); }
1487 template<
typename _OutputIterator,
typename _Size,
typename _Generator,
1488 typename _IteratorTag>
1489 inline _OutputIterator
1490 __generate_n_switch(_OutputIterator __begin, _Size __n, _Generator __gen,
1492 {
return generate_n(__begin, __n, __gen,
1496 template<
typename _RAIter,
typename _Size,
typename _Generator>
1498 __generate_n_switch(_RAIter __begin, _Size __n, _Generator __gen,
1499 random_access_iterator_tag,
1507 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1508 inline _OutputIterator
1509 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen,
1512 return __generate_n_switch(__begin, __n, __gen,
1517 template<
typename _OutputIterator,
typename _Size,
typename _Generator>
1518 inline _OutputIterator
1519 generate_n(_OutputIterator __begin, _Size __n, _Generator __gen)
1521 return __generate_n_switch(__begin, __n, __gen,
1527 template<
typename _RAIter>
1529 random_shuffle(_RAIter __begin, _RAIter __end,
1531 { _GLIBCXX_STD_A::random_shuffle(__begin, __end); }
1534 template<
typename _RAIter,
typename _RandomNumberGenerator>
1536 random_shuffle(_RAIter __begin, _RAIter __end,
1537 _RandomNumberGenerator& __rand,
1539 { _GLIBCXX_STD_A::random_shuffle(__begin, __end, __rand); }
1543 template<
typename _MustBeInt =
int>
1552 template<
typename _RAIter>
1554 random_shuffle(_RAIter __begin, _RAIter __end)
1558 __gnu_parallel::random_shuffle(__begin, __end, __r);
1562 template<
typename _RAIter,
typename _RandomNumberGenerator>
1564 random_shuffle(_RAIter __begin, _RAIter __end,
1571 if (__begin == __end)
1582 template<
typename _FIterator,
typename _Predicate>
1584 partition(_FIterator __begin, _FIterator __end,
1586 {
return _GLIBCXX_STD_A::partition(__begin, __end, __pred); }
1589 template<
typename _FIterator,
typename _Predicate,
typename _IteratorTag>
1591 __partition_switch(_FIterator __begin, _FIterator __end,
1592 _Predicate __pred, _IteratorTag)
1593 {
return partition(__begin, __end, __pred,
1597 template<
typename _RAIter,
typename _Predicate>
1599 __partition_switch(_RAIter __begin, _RAIter __end,
1600 _Predicate __pred, random_access_iterator_tag)
1607 difference_type _DifferenceType;
1610 __gnu_parallel::__get_max_threads());
1611 return __begin + __middle;
1614 return partition(__begin, __end, __pred,
1619 template<
typename _FIterator,
typename _Predicate>
1621 partition(_FIterator __begin, _FIterator __end, _Predicate __pred)
1623 return __partition_switch(__begin, __end, __pred,
1630 template<
typename _RAIter>
1632 sort(_RAIter __begin, _RAIter __end,
1634 { _GLIBCXX_STD_A::sort(__begin, __end); }
1637 template<
typename _RAIter,
typename _Compare>
1639 sort(_RAIter __begin, _RAIter __end, _Compare __comp,
1641 { _GLIBCXX_STD_A::sort<_RAIter, _Compare>(__begin, __end,
1645 template<
typename _RAIter,
typename _Compare,
1648 sort(_RAIter __begin, _RAIter __end, _Compare __comp,
1649 _Parallelism __parallelism)
1651 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1653 if (__begin != __end)
1658 __gnu_parallel::__parallel_sort<false>(
1659 __begin, __end, __comp, __parallelism);
1666 template<
typename _RAIter>
1668 sort(_RAIter __begin, _RAIter __end)
1670 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1676 template<
typename _RAIter>
1678 sort(_RAIter __begin, _RAIter __end,
1681 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1686 template<
typename _RAIter>
1688 sort(_RAIter __begin, _RAIter __end,
1691 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1696 template<
typename _RAIter>
1698 sort(_RAIter __begin, _RAIter __end,
1701 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1706 template<
typename _RAIter>
1708 sort(_RAIter __begin, _RAIter __end,
1711 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1716 template<
typename _RAIter>
1718 sort(_RAIter __begin, _RAIter __end,
1721 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1726 template<
typename _RAIter>
1728 sort(_RAIter __begin, _RAIter __end,
1731 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1736 template<
typename _RAIter>
1738 sort(_RAIter __begin, _RAIter __end,
1741 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1746 template<
typename _RAIter,
typename _Compare>
1748 sort(_RAIter __begin, _RAIter __end, _Compare __comp)
1750 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1758 template<
typename _RAIter>
1760 stable_sort(_RAIter __begin, _RAIter __end,
1762 { _GLIBCXX_STD_A::stable_sort(__begin, __end); }
1765 template<
typename _RAIter,
typename _Compare>
1767 stable_sort(_RAIter __begin, _RAIter __end,
1769 { _GLIBCXX_STD_A::stable_sort<_RAIter, _Compare>(__begin, __end, __comp); }
1772 template<
typename _RAIter,
typename _Compare,
1775 stable_sort(_RAIter __begin, _RAIter __end,
1776 _Compare __comp, _Parallelism __parallelism)
1778 typedef iterator_traits<_RAIter> _TraitsType;
1779 typedef typename _TraitsType::value_type _ValueType;
1781 if (__begin != __end)
1786 __gnu_parallel::__parallel_sort<true>(__begin, __end,
1787 __comp, __parallelism);
1789 stable_sort(__begin, __end, __comp,
1795 template<
typename _RAIter>
1797 stable_sort(_RAIter __begin, _RAIter __end)
1799 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1805 template<
typename _RAIter>
1807 stable_sort(_RAIter __begin, _RAIter __end,
1810 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1815 template<
typename _RAIter>
1817 stable_sort(_RAIter __begin, _RAIter __end,
1820 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1825 template<
typename _RAIter>
1827 stable_sort(_RAIter __begin, _RAIter __end,
1830 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1835 template<
typename _RAIter>
1837 stable_sort(_RAIter __begin, _RAIter __end,
1840 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1845 template<
typename _RAIter>
1847 stable_sort(_RAIter __begin, _RAIter __end,
1850 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1855 template<
typename _RAIter,
typename _Compare>
1857 stable_sort(_RAIter __begin, _RAIter __end, _Compare __comp)
1864 template<
typename _IIter1,
typename _IIter2,
1865 typename _OutputIterator>
1866 inline _OutputIterator
1867 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
1868 _IIter2 __end2, _OutputIterator __result,
1870 {
return _GLIBCXX_STD_A::merge(
1871 __begin1, __end1, __begin2, __end2, __result); }
1874 template<
typename _IIter1,
typename _IIter2,
1875 typename _OutputIterator,
typename _Compare>
1876 inline _OutputIterator
1877 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
1878 _IIter2 __end2, _OutputIterator __result, _Compare __comp,
1880 {
return _GLIBCXX_STD_A::merge(
1881 __begin1, __end1, __begin2, __end2, __result, __comp); }
1884 template<
typename _IIter1,
typename _IIter2,
typename _OutputIterator,
1885 typename _Compare,
typename _IteratorTag1,
1886 typename _IteratorTag2,
typename _IteratorTag3>
1887 inline _OutputIterator
1888 __merge_switch(_IIter1 __begin1, _IIter1 __end1,
1889 _IIter2 __begin2, _IIter2 __end2,
1890 _OutputIterator __result, _Compare __comp,
1891 _IteratorTag1, _IteratorTag2, _IteratorTag3)
1892 {
return _GLIBCXX_STD_A::merge(__begin1, __end1, __begin2, __end2,
1893 __result, __comp); }
1896 template<
typename _IIter1,
typename _IIter2,
1897 typename _OutputIterator,
typename _Compare>
1899 __merge_switch(_IIter1 __begin1, _IIter1 __end1,
1900 _IIter2 __begin2, _IIter2 __end2,
1901 _OutputIterator __result, _Compare __comp,
1902 random_access_iterator_tag, random_access_iterator_tag,
1903 random_access_iterator_tag)
1911 __begin1, __end1, __begin2, __end2, __result,
1912 (__end1 - __begin1) + (__end2 - __begin2), __comp);
1915 __begin1, __end1, __begin2, __end2, __result,
1916 (__end1 - __begin1) + (__end2 - __begin2), __comp);
1920 template<
typename _IIter1,
typename _IIter2,
1921 typename _OutputIterator,
typename _Compare>
1922 inline _OutputIterator
1923 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
1924 _IIter2 __end2, _OutputIterator __result, _Compare __comp)
1926 return __merge_switch(
1927 __begin1, __end1, __begin2, __end2, __result, __comp,
1934 template<
typename _IIter1,
typename _IIter2,
1935 typename _OutputIterator>
1936 inline _OutputIterator
1937 merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
1938 _IIter2 __end2, _OutputIterator __result)
1943 return __gnu_parallel::merge(__begin1, __end1, __begin2, __end2,
1948 template<
typename _RAIter>
1950 nth_element(_RAIter __begin, _RAIter __nth,
1952 {
return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end); }
1955 template<
typename _RAIter,
typename _Compare>
1957 nth_element(_RAIter __begin, _RAIter __nth,
1958 _RAIter __end, _Compare __comp,
1960 {
return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end, __comp); }
1963 template<
typename _RAIter,
typename _Compare>
1965 nth_element(_RAIter __begin, _RAIter __nth,
1966 _RAIter __end, _Compare __comp)
1973 nth_element(__begin, __nth, __end, __comp,
1978 template<
typename _RAIter>
1980 nth_element(_RAIter __begin, _RAIter __nth,
1983 typedef typename iterator_traits<_RAIter>::value_type _ValueType;
1984 __gnu_parallel::nth_element(__begin, __nth, __end,
1989 template<
typename _RAIter,
typename _Compare>
1991 partial_sort(_RAIter __begin, _RAIter __middle,
1992 _RAIter __end, _Compare __comp,
1994 { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end, __comp); }
1997 template<
typename _RAIter>
1999 partial_sort(_RAIter __begin, _RAIter __middle,
2001 { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end); }
2004 template<
typename _RAIter,
typename _Compare>
2006 partial_sort(_RAIter __begin, _RAIter __middle,
2007 _RAIter __end, _Compare __comp)
2015 partial_sort(__begin, __middle, __end, __comp,
2020 template<
typename _RAIter>
2022 partial_sort(_RAIter __begin, _RAIter __middle,
2025 typedef iterator_traits<_RAIter> _TraitsType;
2026 typedef typename _TraitsType::value_type _ValueType;
2027 __gnu_parallel::partial_sort(__begin, __middle, __end,
2032 template<
typename _FIterator>
2034 max_element(_FIterator __begin, _FIterator __end,
2036 {
return _GLIBCXX_STD_A::max_element(__begin, __end); }
2039 template<
typename _FIterator,
typename _Compare>
2041 max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2043 {
return _GLIBCXX_STD_A::max_element(__begin, __end, __comp); }
2046 template<
typename _FIterator,
typename _Compare,
typename _IteratorTag>
2048 __max_element_switch(_FIterator __begin, _FIterator __end,
2049 _Compare __comp, _IteratorTag)
2050 {
return max_element(__begin, __end, __comp,
2054 template<
typename _RAIter,
typename _Compare>
2056 __max_element_switch(_RAIter __begin, _RAIter __end,
2057 _Compare __comp, random_access_iterator_tag,
2063 && __gnu_parallel::__is_parallel(__parallelism_tag)))
2065 _RAIter __res(__begin);
2072 __res, __res, -1, __parallelism_tag);
2076 return max_element(__begin, __end, __comp,
2081 template<
typename _FIterator>
2083 max_element(_FIterator __begin, _FIterator __end,
2086 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2091 template<
typename _FIterator>
2093 max_element(_FIterator __begin, _FIterator __end)
2095 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2096 return __gnu_parallel::max_element(__begin, __end,
2101 template<
typename _FIterator,
typename _Compare>
2103 max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2106 return __max_element_switch(__begin, __end, __comp,
2111 template<
typename _FIterator,
typename _Compare>
2113 max_element(_FIterator __begin, _FIterator __end, _Compare __comp)
2115 return __max_element_switch(__begin, __end, __comp,
2121 template<
typename _FIterator>
2123 min_element(_FIterator __begin, _FIterator __end,
2125 {
return _GLIBCXX_STD_A::min_element(__begin, __end); }
2128 template<
typename _FIterator,
typename _Compare>
2130 min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2132 {
return _GLIBCXX_STD_A::min_element(__begin, __end, __comp); }
2135 template<
typename _FIterator,
typename _Compare,
typename _IteratorTag>
2137 __min_element_switch(_FIterator __begin, _FIterator __end,
2138 _Compare __comp, _IteratorTag)
2139 {
return min_element(__begin, __end, __comp,
2143 template<
typename _RAIter,
typename _Compare>
2145 __min_element_switch(_RAIter __begin, _RAIter __end,
2146 _Compare __comp, random_access_iterator_tag,
2152 && __gnu_parallel::__is_parallel(__parallelism_tag)))
2154 _RAIter __res(__begin);
2161 __res, __res, -1, __parallelism_tag);
2165 return min_element(__begin, __end, __comp,
2170 template<
typename _FIterator>
2172 min_element(_FIterator __begin, _FIterator __end,
2175 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2180 template<
typename _FIterator>
2182 min_element(_FIterator __begin, _FIterator __end)
2184 typedef typename iterator_traits<_FIterator>::value_type _ValueType;
2185 return __gnu_parallel::min_element(__begin, __end,
2190 template<
typename _FIterator,
typename _Compare>
2192 min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
2195 return __min_element_switch(__begin, __end, __comp,
2200 template<
typename _FIterator,
typename _Compare>
2202 min_element(_FIterator __begin, _FIterator __end, _Compare __comp)
2204 return __min_element_switch(__begin, __end, __comp,
2208#if __cplusplus >= 201703L
2209 using _GLIBCXX_STD_A::for_each_n;
2210 using _GLIBCXX_STD_A::sample;