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