1// <parallel/algorithm> Forward declarations -*- C++ -*- 2 3// Copyright (C) 2007-2022 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 37namespace std _GLIBCXX_VISIBILITY(default) 38{ 39namespace __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 _GLIBCXX20_CONSTEXPR 134 bool 135 equal(_IIter1, _IIter1, _IIter2); 136 137 template<typename _IIter1, typename _IIter2, typename _Predicate> 138 _GLIBCXX20_CONSTEXPR 139 bool 140 equal(_IIter1, _IIter1, _IIter2, _Predicate); 141 142 template<typename _IIter, typename _Tp> 143 _IIter 144 find(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag); 145 146 template<typename _IIter, typename _Tp> 147 _IIter 148 find(_IIter, _IIter, const _Tp& __val); 149 150 template<typename _IIter, typename _Tp, typename _IterTag> 151 _IIter 152 __find_switch(_IIter, _IIter, const _Tp&, _IterTag); 153 154 template<typename _RAIter, typename _Tp> 155 _RAIter 156 __find_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag); 157 158 template<typename _IIter, typename _Predicate> 159 _IIter 160 find_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag); 161 162 template<typename _IIter, typename _Predicate> 163 _IIter 164 find_if(_IIter, _IIter, _Predicate); 165 166 template<typename _IIter, typename _Predicate, typename _IterTag> 167 _IIter 168 __find_if_switch(_IIter, _IIter, _Predicate, _IterTag); 169 170 template<typename _RAIter, typename _Predicate> 171 _RAIter 172 __find_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag); 173 174 template<typename _IIter, typename _FIter> 175 _IIter 176 find_first_of(_IIter, _IIter, _FIter, _FIter, 177 __gnu_parallel::sequential_tag); 178 179 template<typename _IIter, typename _FIter, typename _BiPredicate> 180 _IIter 181 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate, 182 __gnu_parallel::sequential_tag); 183 184 template<typename _IIter, typename _FIter, typename _BiPredicate> 185 _IIter 186 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate); 187 188 template<typename _IIter, typename _FIter> 189 _IIter 190 find_first_of(_IIter, _IIter, _FIter, _FIter); 191 192 template<typename _IIter, typename _FIter, 193 typename _IterTag1, typename _IterTag2> 194 _IIter 195 __find_first_of_switch( 196 _IIter, _IIter, _FIter, _FIter, _IterTag1, _IterTag2); 197 198 template<typename _RAIter, typename _FIter, typename _BiPredicate, 199 typename _IterTag> 200 _RAIter 201 __find_first_of_switch(_RAIter, _RAIter, _FIter, _FIter, _BiPredicate, 202 random_access_iterator_tag, _IterTag); 203 204 template<typename _IIter, typename _FIter, typename _BiPredicate, 205 typename _IterTag1, typename _IterTag2> 206 _IIter 207 __find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _BiPredicate, 208 _IterTag1, _IterTag2); 209 210 211 template<typename _IIter, typename _Function> 212 _Function 213 for_each(_IIter, _IIter, _Function); 214 215 template<typename _IIter, typename _Function> 216 _Function 217 for_each(_IIter, _IIter, _Function, __gnu_parallel::sequential_tag); 218 219 template<typename _Iterator, typename _Function> 220 _Function 221 for_each(_Iterator, _Iterator, _Function, __gnu_parallel::_Parallelism); 222 223 template<typename _IIter, typename _Function, typename _IterTag> 224 _Function 225 __for_each_switch(_IIter, _IIter, _Function, _IterTag); 226 227 template<typename _RAIter, typename _Function> 228 _Function 229 __for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag, 230 __gnu_parallel::_Parallelism __parallelism 231 = __gnu_parallel::parallel_balanced); 232 233 234 template<typename _FIter, typename _Generator> 235 void 236 generate(_FIter, _FIter, _Generator); 237 238 template<typename _FIter, typename _Generator> 239 void 240 generate(_FIter, _FIter, _Generator, __gnu_parallel::sequential_tag); 241 242 template<typename _FIter, typename _Generator> 243 void 244 generate(_FIter, _FIter, _Generator, __gnu_parallel::_Parallelism); 245 246 template<typename _FIter, typename _Generator, typename _IterTag> 247 void 248 __generate_switch(_FIter, _FIter, _Generator, _IterTag); 249 250 template<typename _RAIter, typename _Generator> 251 void 252 __generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag, 253 __gnu_parallel::_Parallelism __parallelism 254 = __gnu_parallel::parallel_balanced); 255 256 template<typename _OIter, typename _Size, typename _Generator> 257 _OIter 258 generate_n(_OIter, _Size, _Generator); 259 260 template<typename _OIter, typename _Size, typename _Generator> 261 _OIter 262 generate_n(_OIter, _Size, _Generator, __gnu_parallel::sequential_tag); 263 264 template<typename _OIter, typename _Size, typename _Generator> 265 _OIter 266 generate_n(_OIter, _Size, _Generator, __gnu_parallel::_Parallelism); 267 268 template<typename _OIter, typename _Size, typename _Generator, 269 typename _IterTag> 270 _OIter 271 __generate_n_switch(_OIter, _Size, _Generator, _IterTag); 272 273 template<typename _RAIter, typename _Size, typename _Generator> 274 _RAIter 275 __generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag, 276 __gnu_parallel::_Parallelism __parallelism 277 = __gnu_parallel::parallel_balanced); 278 279 template<typename _IIter1, typename _IIter2> 280 bool 281 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, 282 __gnu_parallel::sequential_tag); 283 284 template<typename _IIter1, typename _IIter2, typename _Predicate> 285 bool 286 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate, 287 __gnu_parallel::sequential_tag); 288 289 template<typename _IIter1, typename _IIter2> 290 _GLIBCXX20_CONSTEXPR 291 bool 292 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2); 293 294 template<typename _IIter1, typename _IIter2, typename _Predicate> 295 _GLIBCXX20_CONSTEXPR 296 bool 297 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate); 298 299 template<typename _IIter1, typename _IIter2, 300 typename _Predicate, typename _IterTag1, typename _IterTag2> 301 bool 302 __lexicographical_compare_switch(_IIter1, _IIter1, _IIter2, _IIter2, 303 _Predicate, _IterTag1, _IterTag2); 304 305 template<typename _RAIter1, typename _RAIter2, typename _Predicate> 306 bool 307 __lexicographical_compare_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 308 _Predicate, random_access_iterator_tag, 309 random_access_iterator_tag); 310 311 // algo.h 312 template<typename _IIter1, typename _IIter2> 313 pair<_IIter1, _IIter2> 314 mismatch(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag); 315 316 template<typename _IIter1, typename _IIter2, typename _Predicate> 317 pair<_IIter1, _IIter2> 318 mismatch(_IIter1, _IIter1, _IIter2, _Predicate, 319 __gnu_parallel::sequential_tag); 320 321 template<typename _IIter1, typename _IIter2> 322 pair<_IIter1, _IIter2> 323 mismatch(_IIter1, _IIter1, _IIter2); 324 325 template<typename _IIter1, typename _IIter2, typename _Predicate> 326 pair<_IIter1, _IIter2> 327 mismatch(_IIter1, _IIter1, _IIter2, _Predicate); 328 329 template<typename _IIter1, typename _IIter2, typename _Predicate, 330 typename _IterTag1, typename _IterTag2> 331 pair<_IIter1, _IIter2> 332 __mismatch_switch(_IIter1, _IIter1, _IIter2, _Predicate, 333 _IterTag1, _IterTag2); 334 335 template<typename _RAIter1, typename _RAIter2, typename _Predicate> 336 pair<_RAIter1, _RAIter2> 337 __mismatch_switch(_RAIter1, _RAIter1, _RAIter2, _Predicate, 338 random_access_iterator_tag, random_access_iterator_tag); 339 340 template<typename _FIter1, typename _FIter2> 341 _FIter1 342 search(_FIter1, _FIter1, _FIter2, _FIter2, __gnu_parallel::sequential_tag); 343 344 template<typename _FIter1, typename _FIter2> 345 _FIter1 346 search(_FIter1, _FIter1, _FIter2, _FIter2); 347 348 template<typename _FIter1, typename _FIter2, typename _BiPredicate> 349 _FIter1 350 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate, 351 __gnu_parallel::sequential_tag); 352 353 template<typename _FIter1, typename _FIter2, typename _BiPredicate> 354 _FIter1 355 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate); 356 357 template<typename _RAIter1, typename _RAIter2> 358 _RAIter1 359 __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 360 random_access_iterator_tag, random_access_iterator_tag); 361 362 template<typename _FIter1, typename _FIter2, typename _IterTag1, 363 typename _IterTag2> 364 _FIter1 365 __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _IterTag1, _IterTag2); 366 367 template<typename _RAIter1, typename _RAIter2, typename _BiPredicate> 368 _RAIter1 369 __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _BiPredicate, 370 random_access_iterator_tag, random_access_iterator_tag); 371 372 template<typename _FIter1, typename _FIter2, typename _BiPredicate, 373 typename _IterTag1, typename _IterTag2> 374 _FIter1 375 __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate, 376 _IterTag1, _IterTag2); 377 378 template<typename _FIter, typename _Integer, typename _Tp> 379 _FIter 380 search_n(_FIter, _FIter, _Integer, const _Tp&, 381 __gnu_parallel::sequential_tag); 382 383 template<typename _FIter, typename _Integer, typename _Tp, 384 typename _BiPredicate> 385 _FIter 386 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate, 387 __gnu_parallel::sequential_tag); 388 389 template<typename _FIter, typename _Integer, typename _Tp> 390 _FIter 391 search_n(_FIter, _FIter, _Integer, const _Tp&); 392 393 template<typename _FIter, typename _Integer, typename _Tp, 394 typename _BiPredicate> 395 _FIter 396 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate); 397 398 template<typename _RAIter, typename _Integer, typename _Tp, 399 typename _BiPredicate> 400 _RAIter 401 __search_n_switch(_RAIter, _RAIter, _Integer, const _Tp&, 402 _BiPredicate, random_access_iterator_tag); 403 404 template<typename _FIter, typename _Integer, typename _Tp, 405 typename _BiPredicate, typename _IterTag> 406 _FIter 407 __search_n_switch(_FIter, _FIter, _Integer, const _Tp&, 408 _BiPredicate, _IterTag); 409 410 411 template<typename _IIter, typename _OIter, typename _UnaryOperation> 412 _OIter 413 transform(_IIter, _IIter, _OIter, _UnaryOperation); 414 415 template<typename _IIter, typename _OIter, typename _UnaryOperation> 416 _OIter 417 transform(_IIter, _IIter, _OIter, _UnaryOperation, 418 __gnu_parallel::sequential_tag); 419 420 template<typename _IIter, typename _OIter, typename _UnaryOperation> 421 _OIter 422 transform(_IIter, _IIter, _OIter, _UnaryOperation, 423 __gnu_parallel::_Parallelism); 424 425 template<typename _IIter, typename _OIter, typename _UnaryOperation, 426 typename _IterTag1, typename _IterTag2> 427 _OIter 428 __transform1_switch(_IIter, _IIter, _OIter, _UnaryOperation, 429 _IterTag1, _IterTag2); 430 431 432 template<typename _RAIIter, typename _RAOIter, typename _UnaryOperation> 433 _RAOIter 434 __transform1_switch(_RAIIter, _RAIIter, _RAOIter, _UnaryOperation, 435 random_access_iterator_tag, random_access_iterator_tag, 436 __gnu_parallel::_Parallelism __parallelism 437 = __gnu_parallel::parallel_balanced); 438 439 440 template<typename _IIter1, typename _IIter2, typename _OIter, 441 typename _BiOperation> 442 _OIter 443 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation); 444 445 template<typename _IIter1, typename _IIter2, typename _OIter, 446 typename _BiOperation> 447 _OIter 448 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation, 449 __gnu_parallel::sequential_tag); 450 451 template<typename _IIter1, typename _IIter2, typename _OIter, 452 typename _BiOperation> 453 _OIter 454 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation, 455 __gnu_parallel::_Parallelism); 456 457 template<typename _RAIter1, typename _RAIter2, typename _RAIter3, 458 typename _BiOperation> 459 _RAIter3 460 __transform2_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter3, _BiOperation, 461 random_access_iterator_tag, random_access_iterator_tag, 462 random_access_iterator_tag, 463 __gnu_parallel::_Parallelism __parallelism 464 = __gnu_parallel::parallel_balanced); 465 466 template<typename _IIter1, typename _IIter2, typename _OIter, 467 typename _BiOperation, typename _Tag1, 468 typename _Tag2, typename _Tag3> 469 _OIter 470 __transform2_switch(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation, 471 _Tag1, _Tag2, _Tag3); 472 473 474 template<typename _FIter, typename _Tp> 475 void 476 replace(_FIter, _FIter, const _Tp&, const _Tp&); 477 478 template<typename _FIter, typename _Tp> 479 void 480 replace(_FIter, _FIter, const _Tp&, const _Tp&, 481 __gnu_parallel::sequential_tag); 482 483 template<typename _FIter, typename _Tp> 484 void 485 replace(_FIter, _FIter, const _Tp&, const _Tp&, 486 __gnu_parallel::_Parallelism); 487 488 template<typename _FIter, typename _Tp, typename _IterTag> 489 void 490 __replace_switch(_FIter, _FIter, const _Tp&, const _Tp&, _IterTag); 491 492 template<typename _RAIter, typename _Tp> 493 void 494 __replace_switch(_RAIter, _RAIter, const _Tp&, const _Tp&, 495 random_access_iterator_tag, __gnu_parallel::_Parallelism); 496 497 498 template<typename _FIter, typename _Predicate, typename _Tp> 499 void 500 replace_if(_FIter, _FIter, _Predicate, const _Tp&); 501 502 template<typename _FIter, typename _Predicate, typename _Tp> 503 void 504 replace_if(_FIter, _FIter, _Predicate, const _Tp&, 505 __gnu_parallel::sequential_tag); 506 507 template<typename _FIter, typename _Predicate, typename _Tp> 508 void 509 replace_if(_FIter, _FIter, _Predicate, const _Tp&, 510 __gnu_parallel::_Parallelism); 511 512 template<typename _FIter, typename _Predicate, typename _Tp, 513 typename _IterTag> 514 void 515 __replace_if_switch(_FIter, _FIter, _Predicate, const _Tp&, _IterTag); 516 517 template<typename _RAIter, typename _Predicate, typename _Tp> 518 void 519 __replace_if_switch(_RAIter, _RAIter, _Predicate, const _Tp&, 520 random_access_iterator_tag, 521 __gnu_parallel::_Parallelism); 522 523 524 template<typename _FIter> 525 _FIter 526 max_element(_FIter, _FIter); 527 528 template<typename _FIter> 529 _FIter 530 max_element(_FIter, _FIter, __gnu_parallel::sequential_tag); 531 532 template<typename _FIter> 533 _FIter 534 max_element(_FIter, _FIter, __gnu_parallel::_Parallelism); 535 536 template<typename _FIter, typename _Compare> 537 _FIter 538 max_element(_FIter, _FIter, _Compare); 539 540 template<typename _FIter, typename _Compare> 541 _FIter 542 max_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag); 543 544 template<typename _FIter, typename _Compare> 545 _FIter 546 max_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism); 547 548 template<typename _FIter, typename _Compare, typename _IterTag> 549 _FIter 550 __max_element_switch(_FIter, _FIter, _Compare, _IterTag); 551 552 template<typename _RAIter, typename _Compare> 553 _RAIter 554 __max_element_switch( 555 _RAIter, _RAIter, _Compare, random_access_iterator_tag, 556 __gnu_parallel::_Parallelism __parallelism 557 = __gnu_parallel::parallel_balanced); 558 559 560 template<typename _IIter1, typename _IIter2, typename _OIter> 561 _OIter 562 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 563 __gnu_parallel::sequential_tag); 564 565 template<typename _IIter1, typename _IIter2, typename _OIter, 566 typename _Compare> 567 _OIter 568 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare, 569 __gnu_parallel::sequential_tag); 570 571 template<typename _IIter1, typename _IIter2, typename _OIter, 572 typename _Compare> 573 _OIter 574 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 575 576 template<typename _IIter1, typename _IIter2, typename _OIter> 577 _OIter 578 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 579 580 template<typename _IIter1, typename _IIter2, typename _OIter, 581 typename _Compare, typename _IterTag1, typename _IterTag2, 582 typename _IterTag3> 583 _OIter 584 __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare, 585 _IterTag1, _IterTag2, _IterTag3); 586 587 template<typename _IIter1, typename _IIter2, typename _OIter, 588 typename _Compare> 589 _OIter 590 __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare, 591 random_access_iterator_tag, random_access_iterator_tag, 592 random_access_iterator_tag); 593 594 595 template<typename _FIter> 596 _FIter 597 min_element(_FIter, _FIter); 598 599 template<typename _FIter> 600 _FIter 601 min_element(_FIter, _FIter, __gnu_parallel::sequential_tag); 602 603 template<typename _FIter> 604 _FIter 605 min_element(_FIter, _FIter, 606 __gnu_parallel::_Parallelism __parallelism_tag); 607 608 template<typename _FIter, typename _Compare> 609 _FIter 610 min_element(_FIter, _FIter, _Compare); 611 612 template<typename _FIter, typename _Compare> 613 _FIter 614 min_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag); 615 616 template<typename _FIter, typename _Compare> 617 _FIter 618 min_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism); 619 620 template<typename _FIter, typename _Compare, typename _IterTag> 621 _FIter 622 __min_element_switch(_FIter, _FIter, _Compare, _IterTag); 623 624 template<typename _RAIter, typename _Compare> 625 _RAIter 626 __min_element_switch( 627 _RAIter, _RAIter, _Compare, random_access_iterator_tag, 628 __gnu_parallel::_Parallelism __parallelism 629 = __gnu_parallel::parallel_balanced); 630 631 template<typename _RAIter> 632 void 633 nth_element(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag); 634 635 template<typename _RAIter, typename _Compare> 636 void 637 nth_element(_RAIter, _RAIter, _RAIter, _Compare, 638 __gnu_parallel::sequential_tag); 639 640 template<typename _RAIter, typename _Compare> 641 void 642 nth_element(_RAIter, _RAIter, _RAIter, _Compare); 643 644 template<typename _RAIter> 645 void 646 nth_element(_RAIter, _RAIter, _RAIter); 647 648 template<typename _RAIter, typename _Compare> 649 void 650 partial_sort(_RAIter, _RAIter, _RAIter, _Compare, 651 __gnu_parallel::sequential_tag); 652 653 template<typename _RAIter> 654 void 655 partial_sort(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag); 656 657 template<typename _RAIter, typename _Compare> 658 void 659 partial_sort(_RAIter, _RAIter, _RAIter, _Compare); 660 661 template<typename _RAIter> 662 void 663 partial_sort(_RAIter, _RAIter, _RAIter); 664 665 template<typename _FIter, typename _Predicate> 666 _FIter 667 partition(_FIter, _FIter, _Predicate, __gnu_parallel::sequential_tag); 668 669 template<typename _FIter, typename _Predicate> 670 _FIter 671 partition(_FIter, _FIter, _Predicate); 672 673 template<typename _FIter, typename _Predicate, typename _IterTag> 674 _FIter 675 __partition_switch(_FIter, _FIter, _Predicate, _IterTag); 676 677 template<typename _RAIter, typename _Predicate> 678 _RAIter 679 __partition_switch( 680 _RAIter, _RAIter, _Predicate, random_access_iterator_tag); 681 682 template<typename _RAIter> 683 void 684 random_shuffle(_RAIter, _RAIter, __gnu_parallel::sequential_tag); 685 686 template<typename _RAIter, typename _RandomNumberGenerator> 687 void 688 random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&, 689 __gnu_parallel::sequential_tag); 690 691 template<typename _RAIter> 692 void 693 random_shuffle(_RAIter, _RAIter); 694 695 template<typename _RAIter, typename _RandomNumberGenerator> 696 void 697 random_shuffle(_RAIter, _RAIter, 698#if __cplusplus >= 201103L 699 _RandomNumberGenerator&&); 700#else 701 _RandomNumberGenerator&); 702#endif 703 704 template<typename _IIter1, typename _IIter2, typename _OIter> 705 _OIter 706 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 707 __gnu_parallel::sequential_tag); 708 709 template<typename _IIter1, typename _IIter2, typename _OIter, 710 typename _Predicate> 711 _OIter 712 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate, 713 __gnu_parallel::sequential_tag); 714 715 template<typename _IIter1, typename _IIter2, typename _OIter> 716 _OIter 717 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 718 719 template<typename _IIter1, typename _IIter2, typename _OIter, 720 typename _Predicate> 721 _OIter 722 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate); 723 724 template<typename _IIter1, typename _IIter2, typename _Predicate, 725 typename _OIter, typename _IterTag1, typename _IterTag2, 726 typename _IterTag3> 727 _OIter 728 __set_union_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 729 _Predicate, _IterTag1, _IterTag2, _IterTag3); 730 731 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 732 typename _Predicate> 733 _Output_RAIter 734 __set_union_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _Output_RAIter, 735 _Predicate, random_access_iterator_tag, 736 random_access_iterator_tag, random_access_iterator_tag); 737 738 template<typename _IIter1, typename _IIter2, typename _OIter> 739 _OIter 740 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 741 __gnu_parallel::sequential_tag); 742 743 template<typename _IIter1, typename _IIter2, typename _OIter, 744 typename _Predicate> 745 _OIter 746 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate, 747 __gnu_parallel::sequential_tag); 748 749 template<typename _IIter1, typename _IIter2, typename _OIter> 750 _OIter 751 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 752 753 template<typename _IIter1, typename _IIter2, typename _OIter, 754 typename _Predicate> 755 _OIter 756 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate); 757 758 template<typename _IIter1, typename _IIter2, typename _Predicate, 759 typename _OIter, typename _IterTag1, typename _IterTag2, 760 typename _IterTag3> 761 _OIter 762 __set_intersection_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 763 _Predicate, _IterTag1, _IterTag2, _IterTag3); 764 765 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 766 typename _Predicate> 767 _Output_RAIter 768 __set_intersection_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 769 _Output_RAIter, _Predicate, 770 random_access_iterator_tag, 771 random_access_iterator_tag, 772 random_access_iterator_tag); 773 774 template<typename _IIter1, typename _IIter2, typename _OIter> 775 _OIter 776 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 777 __gnu_parallel::sequential_tag); 778 779 template<typename _IIter1, typename _IIter2, typename _OIter, 780 typename _Predicate> 781 _OIter 782 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 783 _Predicate, __gnu_parallel::sequential_tag); 784 785 template<typename _IIter1, typename _IIter2, typename _OIter> 786 _OIter 787 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 788 789 template<typename _IIter1, typename _IIter2, typename _OIter, 790 typename _Predicate> 791 _OIter 792 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 793 _Predicate); 794 795 template<typename _IIter1, typename _IIter2, typename _Predicate, 796 typename _OIter, typename _IterTag1, typename _IterTag2, 797 typename _IterTag3> 798 _OIter 799 __set_symmetric_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, 800 _OIter, _Predicate, _IterTag1, _IterTag2, 801 _IterTag3); 802 803 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 804 typename _Predicate> 805 _Output_RAIter 806 __set_symmetric_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 807 _Output_RAIter, _Predicate, 808 random_access_iterator_tag, 809 random_access_iterator_tag, 810 random_access_iterator_tag); 811 812 813 template<typename _IIter1, typename _IIter2, typename _OIter> 814 _OIter 815 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 816 __gnu_parallel::sequential_tag); 817 818 template<typename _IIter1, typename _IIter2, typename _OIter, 819 typename _Predicate> 820 _OIter 821 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate, 822 __gnu_parallel::sequential_tag); 823 824 template<typename _IIter1, typename _IIter2, typename _OIter> 825 _OIter 826 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 827 828 template<typename _IIter1, typename _IIter2, typename _OIter, 829 typename _Predicate> 830 _OIter 831 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate); 832 833 template<typename _IIter1, typename _IIter2, typename _Predicate, 834 typename _OIter, typename _IterTag1, typename _IterTag2, 835 typename _IterTag3> 836 _OIter 837 __set_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 838 _Predicate, _IterTag1, _IterTag2, _IterTag3); 839 840 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 841 typename _Predicate> 842 _Output_RAIter 843 __set_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 844 _Output_RAIter, _Predicate, 845 random_access_iterator_tag, 846 random_access_iterator_tag, 847 random_access_iterator_tag); 848 849 850 template<typename _RAIter> 851 void 852 sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag); 853 854 template<typename _RAIter, typename _Compare> 855 void 856 sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag); 857 858 template<typename _RAIter> 859 void 860 sort(_RAIter, _RAIter); 861 862 template<typename _RAIter, typename _Compare> 863 void 864 sort(_RAIter, _RAIter, _Compare); 865 866 template<typename _RAIter> 867 void 868 stable_sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag); 869 870 template<typename _RAIter, typename _Compare> 871 void 872 stable_sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag); 873 874 template<typename _RAIter> 875 void 876 stable_sort(_RAIter, _RAIter); 877 878 template<typename _RAIter, typename _Compare> 879 void 880 stable_sort(_RAIter, _RAIter, _Compare); 881 882 template<typename _IIter, typename _OIter> 883 _OIter 884 unique_copy(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag); 885 886 template<typename _IIter, typename _OIter, typename _Predicate> 887 _OIter 888 unique_copy(_IIter, _IIter, _OIter, _Predicate, 889 __gnu_parallel::sequential_tag); 890 891 template<typename _IIter, typename _OIter> 892 _OIter 893 unique_copy(_IIter, _IIter, _OIter); 894 895 template<typename _IIter, typename _OIter, typename _Predicate> 896 _OIter 897 unique_copy(_IIter, _IIter, _OIter, _Predicate); 898 899 template<typename _IIter, typename _OIter, typename _Predicate, 900 typename _IterTag1, typename _IterTag2> 901 _OIter 902 __unique_copy_switch(_IIter, _IIter, _OIter, _Predicate, 903 _IterTag1, _IterTag2); 904 905 template<typename _RAIter, typename _RandomAccess_OIter, typename _Predicate> 906 _RandomAccess_OIter 907 __unique_copy_switch(_RAIter, _RAIter, _RandomAccess_OIter, _Predicate, 908 random_access_iterator_tag, random_access_iterator_tag); 909} // end namespace __parallel 910} // end namespace std 911 912#endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */ 913