1*e4b17023SJohn Marino // <numeric> parallel extensions -*- C++ -*- 2*e4b17023SJohn Marino 3*e4b17023SJohn Marino // Copyright (C) 2007, 2008, 2009 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/numericfwd.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_NUMERICFWD_H 30*e4b17023SJohn Marino #define _GLIBCXX_PARALLEL_NUMERICFWD_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 _IIter, typename _Tp> 42*e4b17023SJohn Marino _Tp 43*e4b17023SJohn Marino accumulate(_IIter, _IIter, _Tp); 44*e4b17023SJohn Marino 45*e4b17023SJohn Marino template<typename _IIter, typename _Tp> 46*e4b17023SJohn Marino _Tp 47*e4b17023SJohn Marino accumulate(_IIter, _IIter, _Tp, __gnu_parallel::sequential_tag); 48*e4b17023SJohn Marino 49*e4b17023SJohn Marino template<typename _IIter, typename _Tp> 50*e4b17023SJohn Marino _Tp 51*e4b17023SJohn Marino accumulate(_IIter, _IIter, _Tp, __gnu_parallel::_Parallelism); 52*e4b17023SJohn Marino 53*e4b17023SJohn Marino template<typename _IIter, typename _Tp, typename _Tag> 54*e4b17023SJohn Marino _Tp 55*e4b17023SJohn Marino __accumulate_switch(_IIter, _IIter, _Tp, _Tag); 56*e4b17023SJohn Marino 57*e4b17023SJohn Marino template<typename _IIter, typename _Tp, typename _BinaryOper> 58*e4b17023SJohn Marino _Tp 59*e4b17023SJohn Marino accumulate(_IIter, _IIter, _Tp, _BinaryOper); 60*e4b17023SJohn Marino 61*e4b17023SJohn Marino template<typename _IIter, typename _Tp, typename _BinaryOper> 62*e4b17023SJohn Marino _Tp 63*e4b17023SJohn Marino accumulate(_IIter, _IIter, _Tp, _BinaryOper, 64*e4b17023SJohn Marino __gnu_parallel::sequential_tag); 65*e4b17023SJohn Marino 66*e4b17023SJohn Marino template<typename _IIter, typename _Tp, typename _BinaryOper> 67*e4b17023SJohn Marino _Tp 68*e4b17023SJohn Marino accumulate(_IIter, _IIter, _Tp, _BinaryOper, 69*e4b17023SJohn Marino __gnu_parallel::_Parallelism); 70*e4b17023SJohn Marino 71*e4b17023SJohn Marino template<typename _IIter, typename _Tp, typename _BinaryOper, 72*e4b17023SJohn Marino typename _Tag> 73*e4b17023SJohn Marino _Tp 74*e4b17023SJohn Marino __accumulate_switch(_IIter, _IIter, _Tp, _BinaryOper, _Tag); 75*e4b17023SJohn Marino 76*e4b17023SJohn Marino template<typename _RAIter, typename _Tp, typename _BinaryOper> 77*e4b17023SJohn Marino _Tp 78*e4b17023SJohn Marino __accumulate_switch(_RAIter, _RAIter, _Tp, _BinaryOper, 79*e4b17023SJohn Marino random_access_iterator_tag, 80*e4b17023SJohn Marino __gnu_parallel::_Parallelism __parallelism 81*e4b17023SJohn Marino = __gnu_parallel::parallel_unbalanced); 82*e4b17023SJohn Marino 83*e4b17023SJohn Marino template<typename _IIter, typename _OIter> 84*e4b17023SJohn Marino _OIter 85*e4b17023SJohn Marino adjacent_difference(_IIter, _IIter, _OIter); 86*e4b17023SJohn Marino 87*e4b17023SJohn Marino template<typename _IIter, typename _OIter, typename _BinaryOper> 88*e4b17023SJohn Marino _OIter 89*e4b17023SJohn Marino adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper); 90*e4b17023SJohn Marino 91*e4b17023SJohn Marino template<typename _IIter, typename _OIter> 92*e4b17023SJohn Marino _OIter 93*e4b17023SJohn Marino adjacent_difference(_IIter, _IIter, _OIter, 94*e4b17023SJohn Marino __gnu_parallel::sequential_tag); 95*e4b17023SJohn Marino 96*e4b17023SJohn Marino template<typename _IIter, typename _OIter, typename _BinaryOper> 97*e4b17023SJohn Marino _OIter 98*e4b17023SJohn Marino adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper, 99*e4b17023SJohn Marino __gnu_parallel::sequential_tag); 100*e4b17023SJohn Marino 101*e4b17023SJohn Marino template<typename _IIter, typename _OIter> 102*e4b17023SJohn Marino _OIter 103*e4b17023SJohn Marino adjacent_difference(_IIter, _IIter, _OIter, 104*e4b17023SJohn Marino __gnu_parallel::_Parallelism); 105*e4b17023SJohn Marino 106*e4b17023SJohn Marino template<typename _IIter, typename _OIter, typename _BinaryOper> 107*e4b17023SJohn Marino _OIter 108*e4b17023SJohn Marino adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper, 109*e4b17023SJohn Marino __gnu_parallel::_Parallelism); 110*e4b17023SJohn Marino 111*e4b17023SJohn Marino template<typename _IIter, typename _OIter, typename _BinaryOper, 112*e4b17023SJohn Marino typename _Tag1, typename _Tag2> 113*e4b17023SJohn Marino _OIter 114*e4b17023SJohn Marino __adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper, 115*e4b17023SJohn Marino _Tag1, _Tag2); 116*e4b17023SJohn Marino 117*e4b17023SJohn Marino template<typename _IIter, typename _OIter, typename _BinaryOper> 118*e4b17023SJohn Marino _OIter 119*e4b17023SJohn Marino __adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper, 120*e4b17023SJohn Marino random_access_iterator_tag, 121*e4b17023SJohn Marino random_access_iterator_tag, 122*e4b17023SJohn Marino __gnu_parallel::_Parallelism __parallelism 123*e4b17023SJohn Marino = __gnu_parallel::parallel_unbalanced); 124*e4b17023SJohn Marino 125*e4b17023SJohn Marino template<typename _IIter1, typename _IIter2, typename _Tp> 126*e4b17023SJohn Marino _Tp 127*e4b17023SJohn Marino inner_product(_IIter1, _IIter1, _IIter2, _Tp); 128*e4b17023SJohn Marino 129*e4b17023SJohn Marino template<typename _IIter1, typename _IIter2, typename _Tp> 130*e4b17023SJohn Marino _Tp 131*e4b17023SJohn Marino inner_product(_IIter1, _IIter1, _IIter2, _Tp, 132*e4b17023SJohn Marino __gnu_parallel::sequential_tag); 133*e4b17023SJohn Marino 134*e4b17023SJohn Marino template<typename _IIter1, typename _IIter2, typename _Tp> 135*e4b17023SJohn Marino _Tp 136*e4b17023SJohn Marino inner_product(_IIter1, _IIter1, _IIter2, _Tp, 137*e4b17023SJohn Marino __gnu_parallel::_Parallelism); 138*e4b17023SJohn Marino 139*e4b17023SJohn Marino template<typename _IIter1, typename _IIter2, typename _Tp, 140*e4b17023SJohn Marino typename _BinaryFunction1, typename _BinaryFunction2> 141*e4b17023SJohn Marino _Tp 142*e4b17023SJohn Marino inner_product(_IIter1, _IIter1, _IIter2, _Tp, 143*e4b17023SJohn Marino _BinaryFunction1, _BinaryFunction2); 144*e4b17023SJohn Marino 145*e4b17023SJohn Marino template<typename _IIter1, typename _IIter2, typename _Tp, 146*e4b17023SJohn Marino typename _BinaryFunction1, typename _BinaryFunction2> 147*e4b17023SJohn Marino _Tp 148*e4b17023SJohn Marino inner_product(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1, 149*e4b17023SJohn Marino _BinaryFunction2, __gnu_parallel::sequential_tag); 150*e4b17023SJohn Marino 151*e4b17023SJohn Marino template<typename _IIter1, typename _IIter2, typename _Tp, 152*e4b17023SJohn Marino typename BinaryFunction1, typename BinaryFunction2> 153*e4b17023SJohn Marino _Tp 154*e4b17023SJohn Marino inner_product(_IIter1, _IIter1, _IIter2, _Tp, BinaryFunction1, 155*e4b17023SJohn Marino BinaryFunction2, __gnu_parallel::_Parallelism); 156*e4b17023SJohn Marino 157*e4b17023SJohn Marino template<typename _RAIter1, typename _RAIter2, typename _Tp, 158*e4b17023SJohn Marino typename BinaryFunction1, typename BinaryFunction2> 159*e4b17023SJohn Marino _Tp 160*e4b17023SJohn Marino __inner_product_switch(_RAIter1, _RAIter1, _RAIter2, _Tp, BinaryFunction1, 161*e4b17023SJohn Marino BinaryFunction2, random_access_iterator_tag, 162*e4b17023SJohn Marino random_access_iterator_tag, 163*e4b17023SJohn Marino __gnu_parallel::_Parallelism 164*e4b17023SJohn Marino = __gnu_parallel::parallel_unbalanced); 165*e4b17023SJohn Marino 166*e4b17023SJohn Marino template<typename _IIter1, typename _IIter2, typename _Tp, 167*e4b17023SJohn Marino typename _BinaryFunction1, typename _BinaryFunction2, 168*e4b17023SJohn Marino typename _Tag1, typename _Tag2> 169*e4b17023SJohn Marino _Tp 170*e4b17023SJohn Marino __inner_product_switch(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1, 171*e4b17023SJohn Marino _BinaryFunction2, _Tag1, _Tag2); 172*e4b17023SJohn Marino 173*e4b17023SJohn Marino 174*e4b17023SJohn Marino template<typename _IIter, typename _OIter> 175*e4b17023SJohn Marino _OIter 176*e4b17023SJohn Marino partial_sum(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag); 177*e4b17023SJohn Marino 178*e4b17023SJohn Marino template<typename _IIter, typename _OIter, typename _BinaryOper> 179*e4b17023SJohn Marino _OIter 180*e4b17023SJohn Marino partial_sum(_IIter, _IIter, _OIter, _BinaryOper, 181*e4b17023SJohn Marino __gnu_parallel::sequential_tag); 182*e4b17023SJohn Marino 183*e4b17023SJohn Marino template<typename _IIter, typename _OIter> 184*e4b17023SJohn Marino _OIter 185*e4b17023SJohn Marino partial_sum(_IIter, _IIter, _OIter __result); 186*e4b17023SJohn Marino 187*e4b17023SJohn Marino template<typename _IIter, typename _OIter, typename _BinaryOper> 188*e4b17023SJohn Marino _OIter 189*e4b17023SJohn Marino partial_sum(_IIter, _IIter, _OIter, _BinaryOper); 190*e4b17023SJohn Marino 191*e4b17023SJohn Marino template<typename _IIter, typename _OIter, typename _BinaryOper, 192*e4b17023SJohn Marino typename _Tag1, typename _Tag2> 193*e4b17023SJohn Marino _OIter 194*e4b17023SJohn Marino __partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper, _Tag1, _Tag2); 195*e4b17023SJohn Marino 196*e4b17023SJohn Marino template<typename _IIter, typename _OIter, typename _BinaryOper> 197*e4b17023SJohn Marino _OIter 198*e4b17023SJohn Marino __partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper, 199*e4b17023SJohn Marino random_access_iterator_tag, random_access_iterator_tag); 200*e4b17023SJohn Marino } // end namespace 201*e4b17023SJohn Marino } // end namespace 202*e4b17023SJohn Marino 203*e4b17023SJohn Marino #endif /* _GLIBCXX_PARALLEL_NUMERICFWD_H */ 204