1 // <parallel/numeric> Forward declarations -*- C++ -*- 2 3 // Copyright (C) 2007-2014 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the terms 7 // of the GNU General Public License as published by the Free Software 8 // Foundation; either version 3, or (at your option) any later 9 // version. 10 11 // This library is distributed in the hope that it will be useful, but 12 // WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 // General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 // <http://www.gnu.org/licenses/>. 24 25 /** @file parallel/numericfwd.h 26 * This file is a GNU parallel extension to the Standard C++ Library. 27 */ 28 29 #ifndef _GLIBCXX_PARALLEL_NUMERICFWD_H 30 #define _GLIBCXX_PARALLEL_NUMERICFWD_H 1 31 32 #pragma GCC system_header 33 34 #include <parallel/tags.h> 35 #include <parallel/settings.h> 36 37 namespace std _GLIBCXX_VISIBILITY(default) 38 { 39 namespace __parallel 40 { 41 template<typename _IIter, typename _Tp> 42 _Tp 43 accumulate(_IIter, _IIter, _Tp); 44 45 template<typename _IIter, typename _Tp> 46 _Tp 47 accumulate(_IIter, _IIter, _Tp, __gnu_parallel::sequential_tag); 48 49 template<typename _IIter, typename _Tp> 50 _Tp 51 accumulate(_IIter, _IIter, _Tp, __gnu_parallel::_Parallelism); 52 53 template<typename _IIter, typename _Tp, typename _Tag> 54 _Tp 55 __accumulate_switch(_IIter, _IIter, _Tp, _Tag); 56 57 template<typename _IIter, typename _Tp, typename _BinaryOper> 58 _Tp 59 accumulate(_IIter, _IIter, _Tp, _BinaryOper); 60 61 template<typename _IIter, typename _Tp, typename _BinaryOper> 62 _Tp 63 accumulate(_IIter, _IIter, _Tp, _BinaryOper, 64 __gnu_parallel::sequential_tag); 65 66 template<typename _IIter, typename _Tp, typename _BinaryOper> 67 _Tp 68 accumulate(_IIter, _IIter, _Tp, _BinaryOper, 69 __gnu_parallel::_Parallelism); 70 71 template<typename _IIter, typename _Tp, typename _BinaryOper, 72 typename _Tag> 73 _Tp 74 __accumulate_switch(_IIter, _IIter, _Tp, _BinaryOper, _Tag); 75 76 template<typename _RAIter, typename _Tp, typename _BinaryOper> 77 _Tp 78 __accumulate_switch(_RAIter, _RAIter, _Tp, _BinaryOper, 79 random_access_iterator_tag, 80 __gnu_parallel::_Parallelism __parallelism 81 = __gnu_parallel::parallel_unbalanced); 82 83 template<typename _IIter, typename _OIter> 84 _OIter 85 adjacent_difference(_IIter, _IIter, _OIter); 86 87 template<typename _IIter, typename _OIter, typename _BinaryOper> 88 _OIter 89 adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper); 90 91 template<typename _IIter, typename _OIter> 92 _OIter 93 adjacent_difference(_IIter, _IIter, _OIter, 94 __gnu_parallel::sequential_tag); 95 96 template<typename _IIter, typename _OIter, typename _BinaryOper> 97 _OIter 98 adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper, 99 __gnu_parallel::sequential_tag); 100 101 template<typename _IIter, typename _OIter> 102 _OIter 103 adjacent_difference(_IIter, _IIter, _OIter, 104 __gnu_parallel::_Parallelism); 105 106 template<typename _IIter, typename _OIter, typename _BinaryOper> 107 _OIter 108 adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper, 109 __gnu_parallel::_Parallelism); 110 111 template<typename _IIter, typename _OIter, typename _BinaryOper, 112 typename _Tag1, typename _Tag2> 113 _OIter 114 __adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper, 115 _Tag1, _Tag2); 116 117 template<typename _IIter, typename _OIter, typename _BinaryOper> 118 _OIter 119 __adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper, 120 random_access_iterator_tag, 121 random_access_iterator_tag, 122 __gnu_parallel::_Parallelism __parallelism 123 = __gnu_parallel::parallel_unbalanced); 124 125 template<typename _IIter1, typename _IIter2, typename _Tp> 126 _Tp 127 inner_product(_IIter1, _IIter1, _IIter2, _Tp); 128 129 template<typename _IIter1, typename _IIter2, typename _Tp> 130 _Tp 131 inner_product(_IIter1, _IIter1, _IIter2, _Tp, 132 __gnu_parallel::sequential_tag); 133 134 template<typename _IIter1, typename _IIter2, typename _Tp> 135 _Tp 136 inner_product(_IIter1, _IIter1, _IIter2, _Tp, 137 __gnu_parallel::_Parallelism); 138 139 template<typename _IIter1, typename _IIter2, typename _Tp, 140 typename _BinaryFunction1, typename _BinaryFunction2> 141 _Tp 142 inner_product(_IIter1, _IIter1, _IIter2, _Tp, 143 _BinaryFunction1, _BinaryFunction2); 144 145 template<typename _IIter1, typename _IIter2, typename _Tp, 146 typename _BinaryFunction1, typename _BinaryFunction2> 147 _Tp 148 inner_product(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1, 149 _BinaryFunction2, __gnu_parallel::sequential_tag); 150 151 template<typename _IIter1, typename _IIter2, typename _Tp, 152 typename BinaryFunction1, typename BinaryFunction2> 153 _Tp 154 inner_product(_IIter1, _IIter1, _IIter2, _Tp, BinaryFunction1, 155 BinaryFunction2, __gnu_parallel::_Parallelism); 156 157 template<typename _RAIter1, typename _RAIter2, typename _Tp, 158 typename BinaryFunction1, typename BinaryFunction2> 159 _Tp 160 __inner_product_switch(_RAIter1, _RAIter1, _RAIter2, _Tp, BinaryFunction1, 161 BinaryFunction2, random_access_iterator_tag, 162 random_access_iterator_tag, 163 __gnu_parallel::_Parallelism 164 = __gnu_parallel::parallel_unbalanced); 165 166 template<typename _IIter1, typename _IIter2, typename _Tp, 167 typename _BinaryFunction1, typename _BinaryFunction2, 168 typename _Tag1, typename _Tag2> 169 _Tp 170 __inner_product_switch(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1, 171 _BinaryFunction2, _Tag1, _Tag2); 172 173 174 template<typename _IIter, typename _OIter> 175 _OIter 176 partial_sum(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag); 177 178 template<typename _IIter, typename _OIter, typename _BinaryOper> 179 _OIter 180 partial_sum(_IIter, _IIter, _OIter, _BinaryOper, 181 __gnu_parallel::sequential_tag); 182 183 template<typename _IIter, typename _OIter> 184 _OIter 185 partial_sum(_IIter, _IIter, _OIter __result); 186 187 template<typename _IIter, typename _OIter, typename _BinaryOper> 188 _OIter 189 partial_sum(_IIter, _IIter, _OIter, _BinaryOper); 190 191 template<typename _IIter, typename _OIter, typename _BinaryOper, 192 typename _Tag1, typename _Tag2> 193 _OIter 194 __partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper, _Tag1, _Tag2); 195 196 template<typename _IIter, typename _OIter, typename _BinaryOper> 197 _OIter 198 __partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper, 199 random_access_iterator_tag, random_access_iterator_tag); 200 } // end namespace 201 } // end namespace 202 203 #endif /* _GLIBCXX_PARALLEL_NUMERICFWD_H */ 204