libstdc++
|
00001 // <algorithm> parallel extensions -*- C++ -*- 00002 00003 // Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. 00004 // 00005 // This file is part of the GNU ISO C++ Library. This library is free 00006 // software; you can redistribute it and/or modify it under the terms 00007 // of the GNU General Public License as published by the Free Software 00008 // Foundation; either version 3, or (at your option) any later 00009 // version. 00010 00011 // This library is distributed in the hope that it will be useful, but 00012 // WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 // General Public License for more details. 00015 00016 // Under Section 7 of GPL version 3, you are granted additional 00017 // permissions described in the GCC Runtime Library Exception, version 00018 // 3.1, as published by the Free Software Foundation. 00019 00020 // You should have received a copy of the GNU General Public License and 00021 // a copy of the GCC Runtime Library Exception along with this program; 00022 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 00023 // <http://www.gnu.org/licenses/>. 00024 00025 /** @file parallel/algorithmfwd.h 00026 * This file is a GNU parallel extension to the Standard C++ Library. 00027 */ 00028 00029 #ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H 00030 #define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1 00031 00032 #pragma GCC system_header 00033 00034 #include <parallel/tags.h> 00035 #include <parallel/settings.h> 00036 00037 namespace std 00038 { 00039 namespace __parallel 00040 { 00041 template<typename _FIter> 00042 _FIter 00043 adjacent_find(_FIter, _FIter); 00044 00045 template<typename _FIter> 00046 _FIter 00047 adjacent_find(_FIter, _FIter, __gnu_parallel::sequential_tag); 00048 00049 template<typename _FIter, typename _IterTag> 00050 _FIter 00051 adjacent_find_switch(_FIter, _FIter, _IterTag); 00052 00053 template<typename _RAIter> 00054 _RAIter 00055 adjacent_find_switch(_RAIter, _RAIter, random_access_iterator_tag); 00056 00057 00058 template<typename _FIter, typename _BiPredicate> 00059 _FIter 00060 adjacent_find(_FIter, _FIter, _BiPredicate); 00061 00062 template<typename _FIter, typename _BiPredicate> 00063 _FIter 00064 adjacent_find(_FIter, _FIter, _BiPredicate, 00065 __gnu_parallel::sequential_tag); 00066 00067 template<typename _FIter, typename _BiPredicate, typename _IterTag> 00068 _FIter 00069 adjacent_find_switch(_FIter, _FIter, _BiPredicate, _IterTag); 00070 00071 template<typename _RAIter, typename _BiPredicate> 00072 _RAIter 00073 adjacent_find_switch(_RAIter, _RAIter, _BiPredicate, 00074 random_access_iterator_tag); 00075 00076 00077 template<typename _IIter, typename _Tp> 00078 typename iterator_traits<_IIter>::difference_type 00079 count(_IIter, _IIter, const _Tp&); 00080 00081 template<typename _IIter, typename _Tp> 00082 typename iterator_traits<_IIter>::difference_type 00083 count(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag); 00084 00085 template<typename _IIter, typename _Tp> 00086 typename iterator_traits<_IIter>::difference_type 00087 count(_IIter, _IIter, const _Tp&, __gnu_parallel::_Parallelism); 00088 00089 template<typename _IIter, typename _Tp, typename _IterTag> 00090 typename iterator_traits<_IIter>::difference_type 00091 count_switch(_IIter, _IIter, const _Tp&, _IterTag); 00092 00093 template<typename _RAIter, typename _Tp> 00094 typename iterator_traits<_RAIter>::difference_type 00095 count_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag, 00096 __gnu_parallel::_Parallelism parallelism 00097 = __gnu_parallel::parallel_unbalanced); 00098 00099 00100 template<typename _IIter, typename _Predicate> 00101 typename iterator_traits<_IIter>::difference_type 00102 count_if(_IIter, _IIter, _Predicate); 00103 00104 template<typename _IIter, typename _Predicate> 00105 typename iterator_traits<_IIter>::difference_type 00106 count_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag); 00107 00108 template<typename _IIter, typename _Predicate> 00109 typename iterator_traits<_IIter>::difference_type 00110 count_if(_IIter, _IIter, _Predicate, __gnu_parallel::_Parallelism); 00111 00112 template<typename _IIter, typename _Predicate, typename _IterTag> 00113 typename iterator_traits<_IIter>::difference_type 00114 count_if_switch(_IIter, _IIter, _Predicate, _IterTag); 00115 00116 template<typename _RAIter, typename _Predicate> 00117 typename iterator_traits<_RAIter>::difference_type 00118 count_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag, 00119 __gnu_parallel::_Parallelism parallelism 00120 = __gnu_parallel::parallel_unbalanced); 00121 00122 // algobase.h 00123 template<typename _IIter1, typename _IIter2> 00124 bool 00125 equal(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag); 00126 00127 template<typename _IIter1, typename _IIter2, typename Predicate> 00128 bool 00129 equal(_IIter1, _IIter1, _IIter2, Predicate, 00130 __gnu_parallel::sequential_tag); 00131 00132 template<typename _IIter1, typename _IIter2> 00133 bool 00134 equal(_IIter1, _IIter1, _IIter2); 00135 00136 template<typename _IIter1, typename _IIter2, typename Predicate> 00137 bool 00138 equal(_IIter1, _IIter1, _IIter2, Predicate); 00139 00140 template<typename _IIter, typename _Tp> 00141 _IIter 00142 find(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag); 00143 00144 template<typename _IIter, typename _Tp> 00145 _IIter 00146 find(_IIter, _IIter, const _Tp& val); 00147 00148 template<typename _IIter, typename _Tp, typename _IterTag> 00149 _IIter 00150 find_switch(_IIter, _IIter, const _Tp&, _IterTag); 00151 00152 template<typename _RAIter, typename _Tp> 00153 _RAIter 00154 find_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag); 00155 00156 template<typename _IIter, typename _Predicate> 00157 _IIter 00158 find_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag); 00159 00160 template<typename _IIter, typename _Predicate> 00161 _IIter 00162 find_if(_IIter, _IIter, _Predicate); 00163 00164 template<typename _IIter, typename _Predicate, typename _IterTag> 00165 _IIter 00166 find_if_switch(_IIter, _IIter, _Predicate, _IterTag); 00167 00168 template<typename _RAIter, typename _Predicate> 00169 _RAIter 00170 find_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag); 00171 00172 template<typename _IIter, typename _FIter> 00173 _IIter 00174 find_first_of(_IIter, _IIter, _FIter, _FIter, 00175 __gnu_parallel::sequential_tag); 00176 00177 template<typename _IIter, typename _FIter, typename _BiPredicate> 00178 _IIter 00179 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate, 00180 __gnu_parallel::sequential_tag); 00181 00182 template<typename _IIter, typename _FIter, typename _BiPredicate> 00183 _IIter 00184 find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate); 00185 00186 template<typename _IIter, typename _FIter> 00187 _IIter 00188 find_first_of(_IIter, _IIter, _FIter, _FIter); 00189 00190 template<typename _IIter, typename _FIter, 00191 typename _IterTag1, typename _IterTag2> 00192 _IIter 00193 find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _IterTag1, _IterTag2); 00194 00195 template<typename _RAIter, typename _FIter, typename _BiPredicate, 00196 typename _IterTag> 00197 _RAIter 00198 find_first_of_switch(_RAIter, _RAIter, _FIter, _FIter, _BiPredicate, 00199 random_access_iterator_tag, _IterTag); 00200 00201 template<typename _IIter, typename _FIter, typename _BiPredicate, 00202 typename _IterTag1, typename _IterTag2> 00203 _IIter 00204 find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _BiPredicate, 00205 _IterTag1, _IterTag2); 00206 00207 00208 template<typename _IIter, typename _Function> 00209 _Function 00210 for_each(_IIter, _IIter, _Function); 00211 00212 template<typename _IIter, typename _Function> 00213 _Function 00214 for_each(_IIter, _IIter, _Function, __gnu_parallel::sequential_tag); 00215 00216 template<typename _Iterator, typename _Function> 00217 _Function 00218 for_each(_Iterator, _Iterator, _Function, __gnu_parallel::_Parallelism); 00219 00220 template<typename _IIter, typename _Function, typename _IterTag> 00221 _Function 00222 for_each_switch(_IIter, _IIter, _Function, _IterTag); 00223 00224 template<typename _RAIter, typename _Function> 00225 _Function 00226 for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag, 00227 __gnu_parallel::_Parallelism parallelism 00228 = __gnu_parallel::parallel_balanced); 00229 00230 00231 template<typename _FIter, typename _Generator> 00232 void 00233 generate(_FIter, _FIter, _Generator); 00234 00235 template<typename _FIter, typename _Generator> 00236 void 00237 generate(_FIter, _FIter, _Generator, __gnu_parallel::sequential_tag); 00238 00239 template<typename _FIter, typename _Generator> 00240 void 00241 generate(_FIter, _FIter, _Generator, __gnu_parallel::_Parallelism); 00242 00243 template<typename _FIter, typename _Generator, typename _IterTag> 00244 void 00245 generate_switch(_FIter, _FIter, _Generator, _IterTag); 00246 00247 template<typename _RAIter, typename _Generator> 00248 void 00249 generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag, 00250 __gnu_parallel::_Parallelism parallelism 00251 = __gnu_parallel::parallel_balanced); 00252 00253 template<typename _OIter, typename _Size, typename _Generator> 00254 _OIter 00255 generate_n(_OIter, _Size, _Generator); 00256 00257 template<typename _OIter, typename _Size, typename _Generator> 00258 _OIter 00259 generate_n(_OIter, _Size, _Generator, __gnu_parallel::sequential_tag); 00260 00261 template<typename _OIter, typename _Size, typename _Generator> 00262 _OIter 00263 generate_n(_OIter, _Size, _Generator, __gnu_parallel::_Parallelism); 00264 00265 template<typename _OIter, typename _Size, typename _Generator, 00266 typename _IterTag> 00267 _OIter 00268 generate_n_switch(_OIter, _Size, _Generator, _IterTag); 00269 00270 template<typename _RAIter, typename _Size, typename _Generator> 00271 _RAIter 00272 generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag, 00273 __gnu_parallel::_Parallelism parallelism 00274 = __gnu_parallel::parallel_balanced); 00275 00276 template<typename _IIter1, typename _IIter2> 00277 bool 00278 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, 00279 __gnu_parallel::sequential_tag); 00280 00281 template<typename _IIter1, typename _IIter2, typename _Predicate> 00282 bool 00283 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate, 00284 __gnu_parallel::sequential_tag); 00285 00286 template<typename _IIter1, typename _IIter2> 00287 bool 00288 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2); 00289 00290 template<typename _IIter1, typename _IIter2, typename _Predicate> 00291 bool 00292 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate); 00293 00294 template<typename _IIter1, typename _IIter2, 00295 typename _Predicate, typename _IterTag1, typename _IterTag2> 00296 bool 00297 lexicographical_compare_switch(_IIter1, _IIter1, _IIter2, _IIter2, 00298 _Predicate, _IterTag1, _IterTag2); 00299 00300 template<typename _RAIter1, typename _RAIter2, typename _Predicate> 00301 bool 00302 lexicographical_compare_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 00303 _Predicate, random_access_iterator_tag, 00304 random_access_iterator_tag); 00305 00306 // algo.h 00307 template<typename _IIter1, typename _IIter2> 00308 pair<_IIter1, _IIter2> 00309 mismatch(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag); 00310 00311 template<typename _IIter1, typename _IIter2, typename _Predicate> 00312 pair<_IIter1, _IIter2> 00313 mismatch(_IIter1, _IIter1, _IIter2, _Predicate, 00314 __gnu_parallel::sequential_tag); 00315 00316 template<typename _IIter1, typename _IIter2> 00317 pair<_IIter1, _IIter2> 00318 mismatch(_IIter1, _IIter1, _IIter2); 00319 00320 template<typename _IIter1, typename _IIter2, typename _Predicate> 00321 pair<_IIter1, _IIter2> 00322 mismatch(_IIter1, _IIter1, _IIter2, _Predicate); 00323 00324 template<typename _IIter1, typename _IIter2, typename _Predicate, 00325 typename _IterTag1, typename _IterTag2> 00326 pair<_IIter1, _IIter2> 00327 mismatch_switch(_IIter1, _IIter1, _IIter2, _Predicate, 00328 _IterTag1, _IterTag2); 00329 00330 template<typename _RAIter1, typename _RAIter2, typename _Predicate> 00331 pair<_RAIter1, _RAIter2> 00332 mismatch_switch(_RAIter1, _RAIter1, _RAIter2, _Predicate, 00333 random_access_iterator_tag, random_access_iterator_tag); 00334 00335 template<typename _FIter1, typename _FIter2> 00336 _FIter1 00337 search(_FIter1, _FIter1, _FIter2, _FIter2, __gnu_parallel::sequential_tag); 00338 00339 template<typename _FIter1, typename _FIter2> 00340 _FIter1 00341 search(_FIter1, _FIter1, _FIter2, _FIter2); 00342 00343 template<typename _FIter1, typename _FIter2, typename _BiPredicate> 00344 _FIter1 00345 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate, 00346 __gnu_parallel::sequential_tag); 00347 00348 template<typename _FIter1, typename _FIter2, typename _BiPredicate> 00349 _FIter1 00350 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate); 00351 00352 template<typename _RAIter1, typename _RAIter2> 00353 _RAIter1 00354 search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 00355 random_access_iterator_tag, random_access_iterator_tag); 00356 00357 template<typename _FIter1, typename _FIter2, typename _IterTag1, 00358 typename _IterTag2> 00359 _FIter1 00360 search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _IterTag1, _IterTag2); 00361 00362 template<typename _RAIter1, typename _RAIter2, typename _BiPredicate> 00363 _RAIter1 00364 search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _BiPredicate, 00365 random_access_iterator_tag, random_access_iterator_tag); 00366 00367 template<typename _FIter1, typename _FIter2, typename _BiPredicate, 00368 typename _IterTag1, typename _IterTag2> 00369 _FIter1 00370 search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate, 00371 _IterTag1, _IterTag2); 00372 00373 template<typename _FIter, typename _Integer, typename _Tp> 00374 _FIter 00375 search_n(_FIter, _FIter, _Integer, const _Tp&, 00376 __gnu_parallel::sequential_tag); 00377 00378 template<typename _FIter, typename _Integer, typename _Tp, 00379 typename _BiPredicate> 00380 _FIter 00381 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate, 00382 __gnu_parallel::sequential_tag); 00383 00384 template<typename _FIter, typename _Integer, typename _Tp> 00385 _FIter 00386 search_n(_FIter, _FIter, _Integer, const _Tp&); 00387 00388 template<typename _FIter, typename _Integer, typename _Tp, 00389 typename _BiPredicate> 00390 _FIter 00391 search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate); 00392 00393 template<typename _RAIter, typename _Integer, typename _Tp, 00394 typename _BiPredicate> 00395 _RAIter 00396 search_n_switch(_RAIter, _RAIter, _Integer, const _Tp&, 00397 _BiPredicate, random_access_iterator_tag); 00398 00399 template<typename _FIter, typename _Integer, typename _Tp, 00400 typename _BiPredicate, typename _IterTag> 00401 _FIter 00402 search_n_switch(_FIter, _FIter, _Integer, const _Tp&, 00403 _BiPredicate, _IterTag); 00404 00405 00406 template<typename _IIter, typename _OIter, typename UnaryOperation> 00407 _OIter 00408 transform(_IIter, _IIter, _OIter, UnaryOperation); 00409 00410 template<typename _IIter, typename _OIter, typename UnaryOperation> 00411 _OIter 00412 transform(_IIter, _IIter, _OIter, UnaryOperation, 00413 __gnu_parallel::sequential_tag); 00414 00415 template<typename _IIter, typename _OIter, typename UnaryOperation> 00416 _OIter 00417 transform(_IIter, _IIter, _OIter, UnaryOperation, 00418 __gnu_parallel::_Parallelism); 00419 00420 template<typename _IIter, typename _OIter, typename UnaryOperation, 00421 typename _IterTag1, typename _IterTag2> 00422 _OIter 00423 transform1_switch(_IIter, _IIter, _OIter, UnaryOperation, 00424 _IterTag1, _IterTag2); 00425 00426 00427 template<typename _RAIIter, typename _RAOIter, typename UnaryOperation> 00428 _RAOIter 00429 transform1_switch(_RAIIter, _RAIIter, _RAOIter, UnaryOperation, 00430 random_access_iterator_tag, random_access_iterator_tag, 00431 __gnu_parallel::_Parallelism parallelism 00432 = __gnu_parallel::parallel_balanced); 00433 00434 00435 template<typename _IIter1, typename _IIter2, typename _OIter, 00436 typename _BiOperation> 00437 _OIter 00438 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation); 00439 00440 template<typename _IIter1, typename _IIter2, typename _OIter, 00441 typename _BiOperation> 00442 _OIter 00443 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation, 00444 __gnu_parallel::sequential_tag); 00445 00446 template<typename _IIter1, typename _IIter2, typename _OIter, 00447 typename _BiOperation> 00448 _OIter 00449 transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation, 00450 __gnu_parallel::_Parallelism); 00451 00452 template<typename _RAIter1, typename _RAIter2, typename _RAIter3, 00453 typename _BiOperation> 00454 _RAIter3 00455 transform2_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter3, _BiOperation, 00456 random_access_iterator_tag, random_access_iterator_tag, 00457 random_access_iterator_tag, 00458 __gnu_parallel::_Parallelism parallelism 00459 = __gnu_parallel::parallel_balanced); 00460 00461 template<typename _IIter1, typename _IIter2, typename _OIter, 00462 typename _BiOperation, typename _Tag1, 00463 typename _Tag2, typename _Tag3> 00464 _OIter 00465 transform2_switch(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation, 00466 _Tag1, _Tag2, _Tag3); 00467 00468 00469 template<typename _FIter, typename _Tp> 00470 void 00471 replace(_FIter, _FIter, const _Tp&, const _Tp&); 00472 00473 template<typename _FIter, typename _Tp> 00474 void 00475 replace(_FIter, _FIter, const _Tp&, const _Tp&, 00476 __gnu_parallel::sequential_tag); 00477 00478 template<typename _FIter, typename _Tp> 00479 void 00480 replace(_FIter, _FIter, const _Tp&, const _Tp&, 00481 __gnu_parallel::_Parallelism); 00482 00483 template<typename _FIter, typename _Tp, typename _IterTag> 00484 void 00485 replace_switch(_FIter, _FIter, const _Tp&, const _Tp&, _IterTag); 00486 00487 template<typename _RAIter, typename _Tp> 00488 void 00489 replace_switch(_RAIter, _RAIter, const _Tp&, const _Tp&, 00490 random_access_iterator_tag, __gnu_parallel::_Parallelism); 00491 00492 00493 template<typename _FIter, typename _Predicate, typename _Tp> 00494 void 00495 replace_if(_FIter, _FIter, _Predicate, const _Tp&); 00496 00497 template<typename _FIter, typename _Predicate, typename _Tp> 00498 void 00499 replace_if(_FIter, _FIter, _Predicate, const _Tp&, 00500 __gnu_parallel::sequential_tag); 00501 00502 template<typename _FIter, typename _Predicate, typename _Tp> 00503 void 00504 replace_if(_FIter, _FIter, _Predicate, const _Tp&, 00505 __gnu_parallel::_Parallelism); 00506 00507 template<typename _FIter, typename _Predicate, typename _Tp, 00508 typename _IterTag> 00509 void 00510 replace_if_switch(_FIter, _FIter, _Predicate, const _Tp&, _IterTag); 00511 00512 template<typename _RAIter, typename _Predicate, typename _Tp> 00513 void 00514 replace_if_switch(_RAIter, _RAIter, _Predicate, const _Tp&, 00515 random_access_iterator_tag, 00516 __gnu_parallel::_Parallelism); 00517 00518 00519 template<typename _FIter> 00520 _FIter 00521 max_element(_FIter, _FIter); 00522 00523 template<typename _FIter> 00524 _FIter 00525 max_element(_FIter, _FIter, __gnu_parallel::sequential_tag); 00526 00527 template<typename _FIter> 00528 _FIter 00529 max_element(_FIter, _FIter, __gnu_parallel::_Parallelism); 00530 00531 template<typename _FIter, typename _Compare> 00532 _FIter 00533 max_element(_FIter, _FIter, _Compare); 00534 00535 template<typename _FIter, typename _Compare> 00536 _FIter 00537 max_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag); 00538 00539 template<typename _FIter, typename _Compare> 00540 _FIter 00541 max_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism); 00542 00543 template<typename _FIter, typename _Compare, typename _IterTag> 00544 _FIter 00545 max_element_switch(_FIter, _FIter, _Compare, _IterTag); 00546 00547 template<typename _RAIter, typename _Compare> 00548 _RAIter 00549 max_element_switch(_RAIter, _RAIter, _Compare, random_access_iterator_tag, 00550 __gnu_parallel::_Parallelism parallelism 00551 = __gnu_parallel::parallel_balanced); 00552 00553 00554 template<typename _IIter1, typename _IIter2, typename _OIter> 00555 _OIter 00556 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00557 __gnu_parallel::sequential_tag); 00558 00559 template<typename _IIter1, typename _IIter2, typename _OIter, 00560 typename _Compare> 00561 _OIter 00562 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare, 00563 __gnu_parallel::sequential_tag); 00564 00565 template<typename _IIter1, typename _IIter2, typename _OIter, 00566 typename _Compare> 00567 _OIter 00568 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); 00569 00570 template<typename _IIter1, typename _IIter2, typename _OIter> 00571 _OIter 00572 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 00573 00574 template<typename _IIter1, typename _IIter2, typename _OIter, 00575 typename _Compare, typename _IterTag1, typename _IterTag2, 00576 typename _IterTag3> 00577 _OIter 00578 merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare, 00579 _IterTag1, _IterTag2, _IterTag3); 00580 00581 template<typename _IIter1, typename _IIter2, typename _OIter, 00582 typename _Compare> 00583 _OIter 00584 merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare, 00585 random_access_iterator_tag, random_access_iterator_tag, 00586 random_access_iterator_tag); 00587 00588 00589 template<typename _FIter> 00590 _FIter 00591 min_element(_FIter, _FIter); 00592 00593 template<typename _FIter> 00594 _FIter 00595 min_element(_FIter, _FIter, __gnu_parallel::sequential_tag); 00596 00597 template<typename _FIter> 00598 _FIter 00599 min_element(_FIter, _FIter, __gnu_parallel::_Parallelism parallelism_tag); 00600 00601 template<typename _FIter, typename _Compare> 00602 _FIter 00603 min_element(_FIter, _FIter, _Compare); 00604 00605 template<typename _FIter, typename _Compare> 00606 _FIter 00607 min_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag); 00608 00609 template<typename _FIter, typename _Compare> 00610 _FIter 00611 min_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism); 00612 00613 template<typename _FIter, typename _Compare, typename _IterTag> 00614 _FIter 00615 min_element_switch(_FIter, _FIter, _Compare, _IterTag); 00616 00617 template<typename _RAIter, typename _Compare> 00618 _RAIter 00619 min_element_switch(_RAIter, _RAIter, _Compare, random_access_iterator_tag, 00620 __gnu_parallel::_Parallelism parallelism 00621 = __gnu_parallel::parallel_balanced); 00622 00623 template<typename _RAIter> 00624 void 00625 nth_element(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag); 00626 00627 template<typename _RAIter, typename _Compare> 00628 void 00629 nth_element(_RAIter, _RAIter, _RAIter, _Compare, 00630 __gnu_parallel::sequential_tag); 00631 00632 template<typename _RAIter, typename _Compare> 00633 void 00634 nth_element(_RAIter, _RAIter, _RAIter, _Compare); 00635 00636 template<typename _RAIter> 00637 void 00638 nth_element(_RAIter, _RAIter, _RAIter); 00639 00640 template<typename _RAIter, typename _Compare> 00641 void 00642 partial_sort(_RAIter, _RAIter, _RAIter, _Compare, 00643 __gnu_parallel::sequential_tag); 00644 00645 template<typename _RAIter> 00646 void 00647 partial_sort(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag); 00648 00649 template<typename _RAIter, typename _Compare> 00650 void 00651 partial_sort(_RAIter, _RAIter, _RAIter, _Compare); 00652 00653 template<typename _RAIter> 00654 void 00655 partial_sort(_RAIter, _RAIter, _RAIter); 00656 00657 template<typename _FIter, typename Predicate> 00658 _FIter 00659 partition(_FIter, _FIter, Predicate, __gnu_parallel::sequential_tag); 00660 00661 template<typename _FIter, typename Predicate> 00662 _FIter 00663 partition(_FIter, _FIter, Predicate); 00664 00665 template<typename _FIter, typename Predicate, typename _IterTag> 00666 _FIter 00667 partition_switch(_FIter, _FIter, Predicate, _IterTag); 00668 00669 template<typename _RAIter, typename Predicate> 00670 _RAIter 00671 partition_switch(_RAIter, _RAIter, Predicate, random_access_iterator_tag); 00672 00673 template<typename _RAIter> 00674 void 00675 random_shuffle(_RAIter, _RAIter, __gnu_parallel::sequential_tag); 00676 00677 template<typename _RAIter, typename _RandomNumberGenerator> 00678 void 00679 random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&, 00680 __gnu_parallel::sequential_tag); 00681 00682 template<typename _RAIter> 00683 void 00684 random_shuffle(_RAIter, _RAIter); 00685 00686 template<typename _RAIter, typename _RandomNumberGenerator> 00687 void 00688 random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&); 00689 00690 template<typename _IIter1, typename _IIter2, typename _OIter> 00691 _OIter 00692 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00693 __gnu_parallel::sequential_tag); 00694 00695 template<typename _IIter1, typename _IIter2, typename _OIter, 00696 typename Predicate> 00697 _OIter 00698 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, Predicate, 00699 __gnu_parallel::sequential_tag); 00700 00701 template<typename _IIter1, typename _IIter2, typename _OIter> 00702 _OIter 00703 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 00704 00705 template<typename _IIter1, typename _IIter2, typename _OIter, 00706 typename _Predicate> 00707 _OIter 00708 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate); 00709 00710 template<typename _IIter1, typename _IIter2, typename _Predicate, 00711 typename _OIter, typename _IterTag1, typename _IterTag2, 00712 typename _IterTag3> 00713 _OIter 00714 set_union_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00715 _Predicate, _IterTag1, _IterTag2, _IterTag3); 00716 00717 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 00718 typename _Predicate> 00719 _Output_RAIter 00720 set_union_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _Output_RAIter, 00721 _Predicate, random_access_iterator_tag, 00722 random_access_iterator_tag, random_access_iterator_tag); 00723 00724 template<typename _IIter1, typename _IIter2, typename _OIter> 00725 _OIter 00726 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00727 __gnu_parallel::sequential_tag); 00728 00729 template<typename _IIter1, typename _IIter2, typename _OIter, 00730 typename _Predicate> 00731 _OIter 00732 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate, 00733 __gnu_parallel::sequential_tag); 00734 00735 template<typename _IIter1, typename _IIter2, typename _OIter> 00736 _OIter 00737 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 00738 00739 template<typename _IIter1, typename _IIter2, typename _OIter, 00740 typename _Predicate> 00741 _OIter 00742 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate); 00743 00744 template<typename _IIter1, typename _IIter2, typename _Predicate, 00745 typename _OIter, typename _IterTag1, typename _IterTag2, 00746 typename _IterTag3> 00747 _OIter 00748 set_intersection_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00749 _Predicate, _IterTag1, _IterTag2, _IterTag3); 00750 00751 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 00752 typename _Predicate> 00753 _Output_RAIter 00754 set_intersection_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 00755 _Output_RAIter, _Predicate, 00756 random_access_iterator_tag, 00757 random_access_iterator_tag, 00758 random_access_iterator_tag); 00759 00760 template<typename _IIter1, typename _IIter2, typename _OIter> 00761 _OIter 00762 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00763 __gnu_parallel::sequential_tag); 00764 00765 template<typename _IIter1, typename _IIter2, typename _OIter, 00766 typename _Predicate> 00767 _OIter 00768 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00769 _Predicate, __gnu_parallel::sequential_tag); 00770 00771 template<typename _IIter1, typename _IIter2, typename _OIter> 00772 _OIter 00773 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 00774 00775 template<typename _IIter1, typename _IIter2, typename _OIter, 00776 typename _Predicate> 00777 _OIter 00778 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00779 _Predicate); 00780 00781 template<typename _IIter1, typename _IIter2, typename _Predicate, 00782 typename _OIter, typename _IterTag1, typename _IterTag2, 00783 typename _IterTag3> 00784 _OIter 00785 set_symmetric_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, 00786 _OIter, _Predicate, _IterTag1, _IterTag2, 00787 _IterTag3); 00788 00789 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 00790 typename _Predicate> 00791 _Output_RAIter 00792 set_symmetric_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 00793 _Output_RAIter, _Predicate, 00794 random_access_iterator_tag, 00795 random_access_iterator_tag, 00796 random_access_iterator_tag); 00797 00798 00799 template<typename _IIter1, typename _IIter2, typename _OIter> 00800 _OIter 00801 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00802 __gnu_parallel::sequential_tag); 00803 00804 template<typename _IIter1, typename _IIter2, typename _OIter, 00805 typename _Predicate> 00806 _OIter 00807 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate, 00808 __gnu_parallel::sequential_tag); 00809 00810 template<typename _IIter1, typename _IIter2, typename _OIter> 00811 _OIter 00812 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); 00813 00814 template<typename _IIter1, typename _IIter2, typename _OIter, 00815 typename _Predicate> 00816 _OIter 00817 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate); 00818 00819 template<typename _IIter1, typename _IIter2, typename _Predicate, 00820 typename _OIter, typename _IterTag1, typename _IterTag2, 00821 typename _IterTag3> 00822 _OIter 00823 set_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, 00824 _Predicate, _IterTag1, _IterTag2, _IterTag3); 00825 00826 template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter, 00827 typename _Predicate> 00828 _Output_RAIter 00829 set_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, 00830 _Output_RAIter, _Predicate, 00831 random_access_iterator_tag, 00832 random_access_iterator_tag, 00833 random_access_iterator_tag); 00834 00835 00836 template<typename _RAIter> 00837 void 00838 sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag); 00839 00840 template<typename _RAIter, typename _Compare> 00841 void 00842 sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag); 00843 00844 template<typename _RAIter> 00845 void 00846 sort(_RAIter, _RAIter); 00847 00848 template<typename _RAIter, typename _Compare> 00849 void 00850 sort(_RAIter, _RAIter, _Compare); 00851 00852 template<typename _RAIter> 00853 void 00854 stable_sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag); 00855 00856 template<typename _RAIter, typename _Compare> 00857 void 00858 stable_sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag); 00859 00860 template<typename _RAIter> 00861 void 00862 stable_sort(_RAIter, _RAIter); 00863 00864 template<typename _RAIter, typename _Compare> 00865 void 00866 stable_sort(_RAIter, _RAIter, _Compare); 00867 00868 template<typename _IIter, typename _OIter> 00869 _OIter 00870 unique_copy(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag); 00871 00872 template<typename _IIter, typename _OIter, typename _Predicate> 00873 _OIter 00874 unique_copy(_IIter, _IIter, _OIter, _Predicate, 00875 __gnu_parallel::sequential_tag); 00876 00877 template<typename _IIter, typename _OIter> 00878 _OIter 00879 unique_copy(_IIter, _IIter, _OIter); 00880 00881 template<typename _IIter, typename _OIter, typename _Predicate> 00882 _OIter 00883 unique_copy(_IIter, _IIter, _OIter, _Predicate); 00884 00885 template<typename _IIter, typename _OIter, typename _Predicate, 00886 typename _IterTag1, typename _IterTag2> 00887 _OIter 00888 unique_copy_switch(_IIter, _IIter, _OIter, _Predicate, 00889 _IterTag1, _IterTag2); 00890 00891 template<typename _RAIter, typename _RandomAccess_OIter, typename _Predicate> 00892 _RandomAccess_OIter 00893 unique_copy_switch(_RAIter, _RAIter, _RandomAccess_OIter, _Predicate, 00894 random_access_iterator_tag, random_access_iterator_tag); 00895 } // end namespace __parallel 00896 } // end namespace std 00897 00898 #endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */