1 // <parallel/algorithm> Forward declarations -*- C++ -*- 2 3 // Copyright (C) 2007-2018 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the terms 7 // of the GNU General Public License as published by the Free Software 8 // Foundation; either version 3, or (at your option) any later 9 // version. 10 11 // This library is distributed in the hope that it will be useful, but 12 // WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 // General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 // <http://www.gnu.org/licenses/>. 24 25 /** @file parallel/algorithmfwd.h 26 * This file is a GNU parallel extension to the Standard C++ Library. 27 */ 28 29 #ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H 30 #define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1 31 32 #pragma GCC system_header 33 34 #include <parallel/tags.h> 35 #include <parallel/settings.h> 36 37 namespace std _GLIBCXX_VISIBILITY(default) 38 { 39 namespace __parallel 40 { 41 template<typename _FIter> 42 _FIter 43 adjacent_find(_FIter, _FIter); 44 45 template<typename _FIter> 46 _FIter 47 adjacent_find(_FIter, _FIter, __gnu_parallel::sequential_tag); 48 49 template<typename _FIter, typename _IterTag> 50 _FIter 51 __adjacent_find_switch(_FIter, _FIter, _IterTag); 52 53 template<typename _RAIter> 54 _RAIter 55 __adjacent_find_switch(_RAIter, _RAIter, random_access_iterator_tag); 56 57 58 template<typename _FIter, typename _BiPredicate> 59 _FIter 60 adjacent_find(_FIter, _FIter, _BiPredicate); 61 62 template<typename _FIter, typename _BiPredicate> 63 _FIter 64 adjacent_find(_FIter, _FIter, _BiPredicate, 65 __gnu_parallel::sequential_tag); 66 67 template<typename _FIter, typename _BiPredicate, typename _IterTag> 68 _FIter 69 __adjacent_find_switch(_FIter, _FIter, _BiPredicate, _IterTag); 70 71 template<typename _RAIter, typename _BiPredicate> 72 _RAIter 73 __adjacent_find_switch(_RAIter, _RAIter, _BiPredicate, 74 random_access_iterator_tag); 75 76 77 template<typename _IIter, typename _Tp> 78 typename iterator_traits<_IIter>::difference_type 79 count(_IIter, _IIter, const _Tp&); 80 81 template<typename _IIter, typename _Tp> 82 typename iterator_traits<_IIter>::difference_type 83 count(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag); 84 85 template<typename _IIter, typename _Tp> 86 typename iterator_traits<_IIter>::difference_type 87 count(_IIter, _IIter, const _Tp&, __gnu_parallel::_Parallelism); 88 89 template<typename _IIter, typename _Tp, typename _IterTag> 90 typename iterator_traits<_IIter>::difference_type 91 __count_switch(_IIter, _IIter, const _Tp&, _IterTag); 92 93 template<typename _RAIter, typename _Tp> 94 typename iterator_traits<_RAIter>::difference_type 95 __count_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag, 96 __gnu_parallel::_Parallelism __parallelism 97 = __gnu_parallel::parallel_unbalanced); 98 99 100 template<typename _IIter, typename _Predicate> 101 typename iterator_traits<_IIter>::difference_type 102 count_if(_IIter, _IIter, _Predicate); 103 104 template<typename _IIter, typename _Predicate> 105 typename iterator_traits<_IIter>::difference_type 106 count_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag); 107 108 template<typename _IIter, typename _Predicate> 109 typename iterator_traits<_IIter>::difference_type 110 count_if(_IIter, _IIter, _Predicate, __gnu_parallel::_Parallelism); 111 112 template<typename _IIter, typename _Predicate, typename _IterTag> 113 typename iterator_traits<_IIter>::difference_type 114 __count_if_switch(_IIter, _IIter, _Predicate, _IterTag); 115 116 template<typename _RAIter, typename _Predicate> 117 typename iterator_traits<_RAIter>::difference_type 118 __count_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag, 119 __gnu_parallel::_Parallelism __parallelism 120 = __gnu_parallel::parallel_unbalanced); 121 122 // algobase.h 123 template<typename _IIter1, typename _IIter2> 124 bool 125 equal(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag); 126 127 template<typename _IIter1, typename _IIter2, typename _Predicate> 128 bool 129 equal(_IIter1, _IIter1, _IIter2, _Predicate, 130 __gnu_parallel::sequential_tag); 131 132 template<typename _IIter1, typename _IIter2> 133 bool 134 equal(_IIter1, _IIter1, _IIter2); 135 136 template<typename _IIter1, typename _IIter2, typename _Predicate> 137 bool 138 equal(_IIter1, _IIter1, _IIter2, _Predicate); 139 140 template<typename _IIter, typename _Tp> 141 _IIter 142 find(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag); 143 144 template<typename _IIter, typename _Tp> 145 _IIter 146 find(_IIter, _IIter, const _Tp& __val); 147 148 template<typename _IIter, typename _Tp, typename _IterTag> 149 _IIter 150 __find_switch(_IIter, _IIter, const _Tp&, _IterTag); 151 152 template<typename _RAIter, typename _Tp> 153 _RAIter 154 __find_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag); 155 156 template<typename _IIter, typename _Predicate> 157 _IIter 158 find_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag); 159 160 template<typename _IIter, typename _Predicate> 161 _IIter 162 find_if(_IIter, _IIter, _Predicate); 163 164 template<typename _IIter, typename _Predicate, typename _IterTag> 165 _IIter 166 __find_if_switch(_IIter, _IIter, _Predicate, _IterTag); 167 168 template<typename _RAIter, typename _Predicate> 169 _RAIter 170 __find_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag); 171 172 template<typename _IIter, typename _FIter> 173 _IIter 174 find_first_of(_IIter, _IIter, _FIter, _FIter, 175 __gnu_parallel::sequential_tag); 176 177 template<typename _IIter, typename _FIter, typename _BiPredicate> 178 _IIter 179 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate, 180 __gnu_parallel::sequential_tag); 181 182 template<typename _IIter, typename _FIter, typename _BiPredicate> 183 _IIter 184 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate); 185 186 template<typename _IIter, typename _FIter> 187 _IIter 188 find_first_of(_IIter, _IIter, _FIter, _FIter); 189 190 template<typename _IIter, typename _FIter, 191 typename _IterTag1, typename _IterTag2> 192 _IIter 193 __find_first_of_switch( 194 _IIter, _IIter, _FIter, _FIter, _IterTag1, _IterTag2); 195 196 template<typename _RAIter, typename _FIter, typename _BiPredicate, 197 typename _IterTag> 198 _RAIter 199 __find_first_of_switch(_RAIter, _RAIter, _FIter, _FIter, _BiPredicate, 200 random_access_iterator_tag, _IterTag); 201 202 template<typename _IIter, typename _FIter, typename _BiPredicate, 203 typename _IterTag1, typename _IterTag2> 204 _IIter 205 __find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _BiPredicate, 206 _IterTag1, _IterTag2); 207 208 209 template<typename _IIter, typename _Function> 210 _Function 211 for_each(_IIter, _IIter, _Function); 212 213 template<typename _IIter, typename _Function> 214 _Function 215 for_each(_IIter, _IIter, _Function, __gnu_parallel::sequential_tag); 216 217 template<typename _Iterator, typename _Function> 218 _Function 219 for_each(_Iterator, _Iterator, _Function, __gnu_parallel::_Parallelism); 220 221 template<typename _IIter, typename _Function, typename _IterTag> 222 _Function 223 __for_each_switch(_IIter, _IIter, _Function, _IterTag); 224 225 template<typename _RAIter, typename _Function> 226 _Function 227 __for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag, 228 __gnu_parallel::_Parallelism __parallelism 229 = __gnu_parallel::parallel_balanced); 230 231 232 template<typename _FIter, typename _Generator> 233 void 234 generate(_FIter, _FIter, _Generator); 235 236 template<typename _FIter, typename _Generator> 237 void 238 generate(_FIter, _FIter, _Generator, __gnu_parallel::sequential_tag); 239 240 template<typename _FIter, typename _Generator> 241 void 242 generate(_FIter, _FIter, _Generator, __gnu_parallel::_Parallelism); 243 244 template<typename _FIter, typename _Generator, typename _IterTag> 245 void 246 __generate_switch(_FIter, _FIter, _Generator, _IterTag); 247 248 template<typename _RAIter, typename _Generator> 249 void 250 __generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag, 251 __gnu_parallel::_Parallelism __parallelism 252 = __gnu_parallel::parallel_balanced); 253 254 template<typename _OIter, typename _Size, typename _Generator> 255 _OIter 256 generate_n(_OIter, _Size, _Generator); 257 258 template<typename _OIter, typename _Size, typename _Generator> 259 _OIter 260 generate_n(_OIter, _Size, _Generator, __gnu_parallel::sequential_tag); 261 262 template<typename _OIter, typename _Size, typename _Generator> 263 _OIter 264 generate_n(_OIter, _Size, _Generator, __gnu_parallel::_Parallelism); 265 266 template<typename _OIter, typename _Size, typename _Generator, 267 typename _IterTag> 268 _OIter 269 __generate_n_switch(_OIter, _Size, _Generator, _IterTag); 270 271 template<typename _RAIter, typename _Size, typename _Generator> 272 _RAIter 273 __generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag, 274 __gnu_parallel::_Parallelism __parallelism 275 = __gnu_parallel::parallel_balanced); 276 277 template<typename _IIter1, typename _IIter2> 278 bool 279 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, 280 __gnu_parallel::sequential_tag); 281 282 template<typename _IIter1, typename _IIter2, typename _Predicate> 283 bool 284 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate, 285 __gnu_parallel::sequential_tag); 286 287 template<typename _IIter1, typename _IIter2> 288 bool 289 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2); 290 291 template<typename _IIter1, typename _IIter2, typename _Predicate> 292 bool 293 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate); 294 295 template<typename _IIter1, typename _IIter2, 296 typename _Predicate, typename _IterTag1, typename _IterTag2> 297 bool 298 __lexicographical_compare_switch(_IIter1, _IIter1, _IIter2, _IIter2, 299 _Predicate, _IterTag1, _IterTag2); 300 301 template<typename _RAIter1, typename _RAIter2, typename _Predicate> 302 bool 303 __lexicographical_compare_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 304 _Predicate, random_access_iterator_tag, 305 random_access_iterator_tag); 306 307 // algo.h 308 template<typename _IIter1, typename _IIter2> 309 pair<_IIter1, _IIter2> 310 mismatch(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag); 311 312 template<typename _IIter1, typename _IIter2, typename _Predicate> 313 pair<_IIter1, _IIter2> 314 mismatch(_IIter1, _IIter1, _IIter2, _Predicate, 315 __gnu_parallel::sequential_tag); 316 317 template<typename _IIter1, typename _IIter2> 318 pair<_IIter1, _IIter2> 319 mismatch(_IIter1, _IIter1, _IIter2); 320 321 template<typename _IIter1, typename _IIter2, typename _Predicate> 322 pair<_IIter1, _IIter2> 323 mismatch(_IIter1, _IIter1, _IIter2, _Predicate); 324 325 template<typename _IIter1, typename _IIter2, typename _Predicate, 326 typename _IterTag1, typename _IterTag2> 327 pair<_IIter1, _IIter2> 328 __mismatch_switch(_IIter1, _IIter1, _IIter2, _Predicate, 329 _IterTag1, _IterTag2); 330 331 template<typename _RAIter1, typename _RAIter2, typename _Predicate> 332 pair<_RAIter1, _RAIter2> 333 __mismatch_switch(_RAIter1, _RAIter1, _RAIter2, _Predicate, 334 random_access_iterator_tag, random_access_iterator_tag); 335 336 template<typename _FIter1, typename _FIter2> 337 _FIter1 338 search(_FIter1, _FIter1, _FIter2, _FIter2, __gnu_parallel::sequential_tag); 339 340 template<typename _FIter1, typename _FIter2> 341 _FIter1 342 search(_FIter1, _FIter1, _FIter2, _FIter2); 343 344 template<typename _FIter1, typename _FIter2, typename _BiPredicate> 345 _FIter1 346 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate, 347 __gnu_parallel::sequential_tag); 348 349 template<typename _FIter1, typename _FIter2, typename _BiPredicate> 350 _FIter1 351 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate); 352 353 template<typename _RAIter1, typename _RAIter2> 354 _RAIter1 355 __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 356 random_access_iterator_tag, random_access_iterator_tag); 357 358 template<typename _FIter1, typename _FIter2, typename _IterTag1, 359 typename _IterTag2> 360 _FIter1 361 __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _IterTag1, _IterTag2); 362 363 template<typename _RAIter1, typename _RAIter2, typename _BiPredicate> 364 _RAIter1 365 __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _BiPredicate, 366 random_access_iterator_tag, random_access_iterator_tag); 367 368 template<typename _FIter1, typename _FIter2, typename _BiPredicate, 369 typename _IterTag1, typename _IterTag2> 370 _FIter1 371 __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate, 372 _IterTag1, _IterTag2); 373 374 template<typename _FIter, typename _Integer, typename _Tp> 375 _FIter 376 search_n(_FIter, _FIter, _Integer, const _Tp&, 377 __gnu_parallel::sequential_tag); 378 379 template<typename _FIter, typename _Integer, typename _Tp, 380 typename _BiPredicate> 381 _FIter 382 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate, 383 __gnu_parallel::sequential_tag); 384 385 template<typename _FIter, typename _Integer, typename _Tp> 386 _FIter 387 search_n(_FIter, _FIter, _Integer, const _Tp&); 388 389 template<typename _FIter, typename _Integer, typename _Tp, 390 typename _BiPredicate> 391 _FIter 392 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate); 393 394 template<typename _RAIter, typename _Integer, typename _Tp, 395 typename _BiPredicate> 396 _RAIter 397 __search_n_switch(_RAIter, _RAIter, _Integer, const _Tp&, 398 _BiPredicate, random_access_iterator_tag); 399 400 template<typename _FIter, typename _Integer, typename _Tp, 401 typename _BiPredicate, typename _IterTag> 402 _FIter 403 __search_n_switch(_FIter, _FIter, _Integer, const _Tp&, 404 _BiPredicate, _IterTag); 405 406 407 template<typename _IIter, typename _OIter, typename _UnaryOperation> 408 _OIter 409 transform(_IIter, _IIter, _OIter, _UnaryOperation); 410 411 template<typename _IIter, typename _OIter, typename _UnaryOperation> 412 _OIter 413 transform(_IIter, _IIter, _OIter, _UnaryOperation, 414 __gnu_parallel::sequential_tag); 415 416 template<typename _IIter, typename _OIter, typename _UnaryOperation> 417 _OIter 418 transform(_IIter, _IIter, _OIter, _UnaryOperation, 419 __gnu_parallel::_Parallelism); 420 421 template<typename _IIter, typename _OIter, typename _UnaryOperation, 422 typename _IterTag1, typename _IterTag2> 423 _OIter 424 __transform1_switch(_IIter, _IIter, _OIter, _UnaryOperation, 425 _IterTag1, _IterTag2); 426 427 428 template<typename _RAIIter, typename _RAOIter, typename _UnaryOperation> 429 _RAOIter 430 __transform1_switch(_RAIIter, _RAIIter, _RAOIter, _UnaryOperation, 431 random_access_iterator_tag, random_access_iterator_tag, 432 __gnu_parallel::_Parallelism __parallelism 433 = __gnu_parallel::parallel_balanced); 434 435 436 template<typename _IIter1, typename _IIter2, typename _OIter, 437 typename _BiOperation> 438 _OIter 439 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation); 440 441 template<typename _IIter1, typename _IIter2, typename _OIter, 442 typename _BiOperation> 443 _OIter 444 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation, 445 __gnu_parallel::sequential_tag); 446 447 template<typename _IIter1, typename _IIter2, typename _OIter, 448 typename _BiOperation> 449 _OIter 450 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation, 451 __gnu_parallel::_Parallelism); 452 453 template<typename _RAIter1, typename _RAIter2, typename _RAIter3, 454 typename _BiOperation> 455 _RAIter3 456 __transform2_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter3, _BiOperation, 457 random_access_iterator_tag, random_access_iterator_tag, 458 random_access_iterator_tag, 459 __gnu_parallel::_Parallelism __parallelism 460 = __gnu_parallel::parallel_balanced); 461 462 template<typename _IIter1, typename _IIter2, typename _OIter, 463 typename _BiOperation, typename _Tag1, 464 typename _Tag2, typename _Tag3> 465 _OIter 466 __transform2_switch(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation, 467 _Tag1, _Tag2, _Tag3); 468 469 470 template<typename _FIter, typename _Tp> 471 void 472 replace(_FIter, _FIter, const _Tp&, const _Tp&); 473 474 template<typename _FIter, typename _Tp> 475 void 476 replace(_FIter, _FIter, const _Tp&, const _Tp&, 477 __gnu_parallel::sequential_tag); 478 479 template<typename _FIter, typename _Tp> 480 void 481 replace(_FIter, _FIter, const _Tp&, const _Tp&, 482 __gnu_parallel::_Parallelism); 483 484 template<typename _FIter, typename _Tp, typename _IterTag> 485 void 486 __replace_switch(_FIter, _FIter, const _Tp&, const _Tp&, _IterTag); 487 488 template<typename _RAIter, typename _Tp> 489 void 490 __replace_switch(_RAIter, _RAIter, const _Tp&, const _Tp&, 491 random_access_iterator_tag, __gnu_parallel::_Parallelism); 492 493 494 template<typename _FIter, typename _Predicate, typename _Tp> 495 void 496 replace_if(_FIter, _FIter, _Predicate, const _Tp&); 497 498 template<typename _FIter, typename _Predicate, typename _Tp> 499 void 500 replace_if(_FIter, _FIter, _Predicate, const _Tp&, 501 __gnu_parallel::sequential_tag); 502 503 template<typename _FIter, typename _Predicate, typename _Tp> 504 void 505 replace_if(_FIter, _FIter, _Predicate, const _Tp&, 506 __gnu_parallel::_Parallelism); 507 508 template<typename _FIter, typename _Predicate, typename _Tp, 509 typename _IterTag> 510 void 511 __replace_if_switch(_FIter, _FIter, _Predicate, const _Tp&, _IterTag); 512 513 template<typename _RAIter, typename _Predicate, typename _Tp> 514 void 515 __replace_if_switch(_RAIter, _RAIter, _Predicate, const _Tp&, 516 random_access_iterator_tag, 517 __gnu_parallel::_Parallelism); 518 519 520 template<typename _FIter> 521 _FIter 522 max_element(_FIter, _FIter); 523 524 template<typename _FIter> 525 _FIter 526 max_element(_FIter, _FIter, __gnu_parallel::sequential_tag); 527 528 template<typename _FIter> 529 _FIter 530 max_element(_FIter, _FIter, __gnu_parallel::_Parallelism); 531 532 template<typename _FIter, typename _Compare> 533 _FIter 534 max_element(_FIter, _FIter, _Compare); 535 536 template<typename _FIter, typename _Compare> 537 _FIter 538 max_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag); 539 540 template<typename _FIter, typename _Compare> 541 _FIter 542 max_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism); 543 544 template<typename _FIter, typename _Compare, typename _IterTag> 545 _FIter 546 __max_element_switch(_FIter, _FIter, _Compare, _IterTag); 547 548 template<typename _RAIter, typename _Compare> 549 _RAIter 550 __max_element_switch( 551 _RAIter, _RAIter, _Compare, random_access_iterator_tag, 552 __gnu_parallel::_Parallelism __parallelism 553 = __gnu_parallel::parallel_balanced); 554 555 556 template<typename _IIter1, typename _IIter2, typename _OIter> 557 _OIter 558 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 559 __gnu_parallel::sequential_tag); 560 561 template<typename _IIter1, typename _IIter2, typename _OIter, 562 typename _Compare> 563 _OIter 564 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare, 565 __gnu_parallel::sequential_tag); 566 567 template<typename _IIter1, typename _IIter2, typename _OIter, 568 typename _Compare> 569 _OIter 570 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 571 572 template<typename _IIter1, typename _IIter2, typename _OIter> 573 _OIter 574 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 575 576 template<typename _IIter1, typename _IIter2, typename _OIter, 577 typename _Compare, typename _IterTag1, typename _IterTag2, 578 typename _IterTag3> 579 _OIter 580 __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare, 581 _IterTag1, _IterTag2, _IterTag3); 582 583 template<typename _IIter1, typename _IIter2, typename _OIter, 584 typename _Compare> 585 _OIter 586 __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare, 587 random_access_iterator_tag, random_access_iterator_tag, 588 random_access_iterator_tag); 589 590 591 template<typename _FIter> 592 _FIter 593 min_element(_FIter, _FIter); 594 595 template<typename _FIter> 596 _FIter 597 min_element(_FIter, _FIter, __gnu_parallel::sequential_tag); 598 599 template<typename _FIter> 600 _FIter 601 min_element(_FIter, _FIter, 602 __gnu_parallel::_Parallelism __parallelism_tag); 603 604 template<typename _FIter, typename _Compare> 605 _FIter 606 min_element(_FIter, _FIter, _Compare); 607 608 template<typename _FIter, typename _Compare> 609 _FIter 610 min_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag); 611 612 template<typename _FIter, typename _Compare> 613 _FIter 614 min_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism); 615 616 template<typename _FIter, typename _Compare, typename _IterTag> 617 _FIter 618 __min_element_switch(_FIter, _FIter, _Compare, _IterTag); 619 620 template<typename _RAIter, typename _Compare> 621 _RAIter 622 __min_element_switch( 623 _RAIter, _RAIter, _Compare, random_access_iterator_tag, 624 __gnu_parallel::_Parallelism __parallelism 625 = __gnu_parallel::parallel_balanced); 626 627 template<typename _RAIter> 628 void 629 nth_element(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag); 630 631 template<typename _RAIter, typename _Compare> 632 void 633 nth_element(_RAIter, _RAIter, _RAIter, _Compare, 634 __gnu_parallel::sequential_tag); 635 636 template<typename _RAIter, typename _Compare> 637 void 638 nth_element(_RAIter, _RAIter, _RAIter, _Compare); 639 640 template<typename _RAIter> 641 void 642 nth_element(_RAIter, _RAIter, _RAIter); 643 644 template<typename _RAIter, typename _Compare> 645 void 646 partial_sort(_RAIter, _RAIter, _RAIter, _Compare, 647 __gnu_parallel::sequential_tag); 648 649 template<typename _RAIter> 650 void 651 partial_sort(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag); 652 653 template<typename _RAIter, typename _Compare> 654 void 655 partial_sort(_RAIter, _RAIter, _RAIter, _Compare); 656 657 template<typename _RAIter> 658 void 659 partial_sort(_RAIter, _RAIter, _RAIter); 660 661 template<typename _FIter, typename _Predicate> 662 _FIter 663 partition(_FIter, _FIter, _Predicate, __gnu_parallel::sequential_tag); 664 665 template<typename _FIter, typename _Predicate> 666 _FIter 667 partition(_FIter, _FIter, _Predicate); 668 669 template<typename _FIter, typename _Predicate, typename _IterTag> 670 _FIter 671 __partition_switch(_FIter, _FIter, _Predicate, _IterTag); 672 673 template<typename _RAIter, typename _Predicate> 674 _RAIter 675 __partition_switch( 676 _RAIter, _RAIter, _Predicate, random_access_iterator_tag); 677 678 template<typename _RAIter> 679 void 680 random_shuffle(_RAIter, _RAIter, __gnu_parallel::sequential_tag); 681 682 template<typename _RAIter, typename _RandomNumberGenerator> 683 void 684 random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&, 685 __gnu_parallel::sequential_tag); 686 687 template<typename _RAIter> 688 void 689 random_shuffle(_RAIter, _RAIter); 690 691 template<typename _RAIter, typename _RandomNumberGenerator> 692 void 693 random_shuffle(_RAIter, _RAIter, 694 #if __cplusplus >= 201103L 695 _RandomNumberGenerator&&); 696 #else 697 _RandomNumberGenerator&); 698 #endif 699 700 template<typename _IIter1, typename _IIter2, typename _OIter> 701 _OIter 702 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 703 __gnu_parallel::sequential_tag); 704 705 template<typename _IIter1, typename _IIter2, typename _OIter, 706 typename _Predicate> 707 _OIter 708 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate, 709 __gnu_parallel::sequential_tag); 710 711 template<typename _IIter1, typename _IIter2, typename _OIter> 712 _OIter 713 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 714 715 template<typename _IIter1, typename _IIter2, typename _OIter, 716 typename _Predicate> 717 _OIter 718 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate); 719 720 template<typename _IIter1, typename _IIter2, typename _Predicate, 721 typename _OIter, typename _IterTag1, typename _IterTag2, 722 typename _IterTag3> 723 _OIter 724 __set_union_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 725 _Predicate, _IterTag1, _IterTag2, _IterTag3); 726 727 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 728 typename _Predicate> 729 _Output_RAIter 730 __set_union_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _Output_RAIter, 731 _Predicate, random_access_iterator_tag, 732 random_access_iterator_tag, random_access_iterator_tag); 733 734 template<typename _IIter1, typename _IIter2, typename _OIter> 735 _OIter 736 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 737 __gnu_parallel::sequential_tag); 738 739 template<typename _IIter1, typename _IIter2, typename _OIter, 740 typename _Predicate> 741 _OIter 742 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate, 743 __gnu_parallel::sequential_tag); 744 745 template<typename _IIter1, typename _IIter2, typename _OIter> 746 _OIter 747 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 748 749 template<typename _IIter1, typename _IIter2, typename _OIter, 750 typename _Predicate> 751 _OIter 752 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate); 753 754 template<typename _IIter1, typename _IIter2, typename _Predicate, 755 typename _OIter, typename _IterTag1, typename _IterTag2, 756 typename _IterTag3> 757 _OIter 758 __set_intersection_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 759 _Predicate, _IterTag1, _IterTag2, _IterTag3); 760 761 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 762 typename _Predicate> 763 _Output_RAIter 764 __set_intersection_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 765 _Output_RAIter, _Predicate, 766 random_access_iterator_tag, 767 random_access_iterator_tag, 768 random_access_iterator_tag); 769 770 template<typename _IIter1, typename _IIter2, typename _OIter> 771 _OIter 772 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 773 __gnu_parallel::sequential_tag); 774 775 template<typename _IIter1, typename _IIter2, typename _OIter, 776 typename _Predicate> 777 _OIter 778 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 779 _Predicate, __gnu_parallel::sequential_tag); 780 781 template<typename _IIter1, typename _IIter2, typename _OIter> 782 _OIter 783 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 784 785 template<typename _IIter1, typename _IIter2, typename _OIter, 786 typename _Predicate> 787 _OIter 788 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 789 _Predicate); 790 791 template<typename _IIter1, typename _IIter2, typename _Predicate, 792 typename _OIter, typename _IterTag1, typename _IterTag2, 793 typename _IterTag3> 794 _OIter 795 __set_symmetric_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, 796 _OIter, _Predicate, _IterTag1, _IterTag2, 797 _IterTag3); 798 799 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 800 typename _Predicate> 801 _Output_RAIter 802 __set_symmetric_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 803 _Output_RAIter, _Predicate, 804 random_access_iterator_tag, 805 random_access_iterator_tag, 806 random_access_iterator_tag); 807 808 809 template<typename _IIter1, typename _IIter2, typename _OIter> 810 _OIter 811 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 812 __gnu_parallel::sequential_tag); 813 814 template<typename _IIter1, typename _IIter2, typename _OIter, 815 typename _Predicate> 816 _OIter 817 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate, 818 __gnu_parallel::sequential_tag); 819 820 template<typename _IIter1, typename _IIter2, typename _OIter> 821 _OIter 822 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 823 824 template<typename _IIter1, typename _IIter2, typename _OIter, 825 typename _Predicate> 826 _OIter 827 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate); 828 829 template<typename _IIter1, typename _IIter2, typename _Predicate, 830 typename _OIter, typename _IterTag1, typename _IterTag2, 831 typename _IterTag3> 832 _OIter 833 __set_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 834 _Predicate, _IterTag1, _IterTag2, _IterTag3); 835 836 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 837 typename _Predicate> 838 _Output_RAIter 839 __set_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 840 _Output_RAIter, _Predicate, 841 random_access_iterator_tag, 842 random_access_iterator_tag, 843 random_access_iterator_tag); 844 845 846 template<typename _RAIter> 847 void 848 sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag); 849 850 template<typename _RAIter, typename _Compare> 851 void 852 sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag); 853 854 template<typename _RAIter> 855 void 856 sort(_RAIter, _RAIter); 857 858 template<typename _RAIter, typename _Compare> 859 void 860 sort(_RAIter, _RAIter, _Compare); 861 862 template<typename _RAIter> 863 void 864 stable_sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag); 865 866 template<typename _RAIter, typename _Compare> 867 void 868 stable_sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag); 869 870 template<typename _RAIter> 871 void 872 stable_sort(_RAIter, _RAIter); 873 874 template<typename _RAIter, typename _Compare> 875 void 876 stable_sort(_RAIter, _RAIter, _Compare); 877 878 template<typename _IIter, typename _OIter> 879 _OIter 880 unique_copy(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag); 881 882 template<typename _IIter, typename _OIter, typename _Predicate> 883 _OIter 884 unique_copy(_IIter, _IIter, _OIter, _Predicate, 885 __gnu_parallel::sequential_tag); 886 887 template<typename _IIter, typename _OIter> 888 _OIter 889 unique_copy(_IIter, _IIter, _OIter); 890 891 template<typename _IIter, typename _OIter, typename _Predicate> 892 _OIter 893 unique_copy(_IIter, _IIter, _OIter, _Predicate); 894 895 template<typename _IIter, typename _OIter, typename _Predicate, 896 typename _IterTag1, typename _IterTag2> 897 _OIter 898 __unique_copy_switch(_IIter, _IIter, _OIter, _Predicate, 899 _IterTag1, _IterTag2); 900 901 template<typename _RAIter, typename _RandomAccess_OIter, typename _Predicate> 902 _RandomAccess_OIter 903 __unique_copy_switch(_RAIter, _RAIter, _RandomAccess_OIter, _Predicate, 904 random_access_iterator_tag, random_access_iterator_tag); 905 } // end namespace __parallel 906 } // end namespace std 907 908 #endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */ 909