]>
Commit | Line | Data |
---|---|---|
c2ba9709 JS |
1 | // <numeric> parallel extensions -*- C++ -*- |
2 | ||
748086b7 | 3 | // Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. |
c2ba9709 JS |
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 | |
748086b7 | 8 | // Foundation; either version 3, or (at your option) any later |
c2ba9709 JS |
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 | ||
748086b7 JJ |
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/>. | |
c2ba9709 JS |
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 | |
38 | { | |
39 | namespace __parallel | |
40 | { | |
5817ff8e PC |
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 | |
ee1b5fc5 | 51 | accumulate(_IIter, _IIter, _Tp, __gnu_parallel::_Parallelism); |
5817ff8e PC |
52 | |
53 | template<typename _IIter, typename _Tp, typename _Tag> | |
54 | _Tp | |
1acba85b | 55 | __accumulate_switch(_IIter, _IIter, _Tp, _Tag); |
5817ff8e PC |
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, | |
15ac3c72 | 64 | __gnu_parallel::sequential_tag); |
5817ff8e PC |
65 | |
66 | template<typename _IIter, typename _Tp, typename _BinaryOper> | |
67 | _Tp | |
68 | accumulate(_IIter, _IIter, _Tp, _BinaryOper, | |
15ac3c72 | 69 | __gnu_parallel::_Parallelism); |
5817ff8e PC |
70 | |
71 | template<typename _IIter, typename _Tp, typename _BinaryOper, | |
15ac3c72 | 72 | typename _Tag> |
5817ff8e | 73 | _Tp |
1acba85b | 74 | __accumulate_switch(_IIter, _IIter, _Tp, _BinaryOper, _Tag); |
5817ff8e PC |
75 | |
76 | template<typename _RAIter, typename _Tp, typename _BinaryOper> | |
77 | _Tp | |
1acba85b | 78 | __accumulate_switch(_RAIter, _RAIter, _Tp, _BinaryOper, |
15ac3c72 JS |
79 | random_access_iterator_tag, |
80 | __gnu_parallel::_Parallelism __parallelism | |
81 | = __gnu_parallel::parallel_unbalanced); | |
c2ba9709 | 82 | |
5817ff8e PC |
83 | template<typename _IIter, typename _OIter> |
84 | _OIter | |
85 | adjacent_difference(_IIter, _IIter, _OIter); | |
6f95a65a BK |
86 | |
87 | template<typename _IIter, typename _OIter, typename _BinaryOper> | |
5817ff8e PC |
88 | _OIter |
89 | adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper); | |
c2ba9709 JS |
90 | |
91 | template<typename _IIter, typename _OIter> | |
5817ff8e PC |
92 | _OIter |
93 | adjacent_difference(_IIter, _IIter, _OIter, | |
15ac3c72 | 94 | __gnu_parallel::sequential_tag); |
c2ba9709 JS |
95 | |
96 | template<typename _IIter, typename _OIter, typename _BinaryOper> | |
5817ff8e PC |
97 | _OIter |
98 | adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper, | |
15ac3c72 | 99 | __gnu_parallel::sequential_tag); |
c2ba9709 JS |
100 | |
101 | template<typename _IIter, typename _OIter> | |
5817ff8e PC |
102 | _OIter |
103 | adjacent_difference(_IIter, _IIter, _OIter, | |
15ac3c72 | 104 | __gnu_parallel::_Parallelism); |
c2ba9709 JS |
105 | |
106 | template<typename _IIter, typename _OIter, typename _BinaryOper> | |
5817ff8e PC |
107 | _OIter |
108 | adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper, | |
15ac3c72 | 109 | __gnu_parallel::_Parallelism); |
c2ba9709 | 110 | |
5817ff8e | 111 | template<typename _IIter, typename _OIter, typename _BinaryOper, |
15ac3c72 | 112 | typename _Tag1, typename _Tag2> |
5817ff8e | 113 | _OIter |
1acba85b | 114 | __adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper, |
15ac3c72 | 115 | _Tag1, _Tag2); |
c2ba9709 JS |
116 | |
117 | template<typename _IIter, typename _OIter, typename _BinaryOper> | |
5817ff8e | 118 | _OIter |
1acba85b | 119 | __adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper, |
15ac3c72 JS |
120 | random_access_iterator_tag, |
121 | random_access_iterator_tag, | |
122 | __gnu_parallel::_Parallelism __parallelism | |
123 | = __gnu_parallel::parallel_unbalanced); | |
5817ff8e PC |
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, | |
15ac3c72 | 132 | __gnu_parallel::sequential_tag); |
5817ff8e PC |
133 | |
134 | template<typename _IIter1, typename _IIter2, typename _Tp> | |
135 | _Tp | |
136 | inner_product(_IIter1, _IIter1, _IIter2, _Tp, | |
15ac3c72 | 137 | __gnu_parallel::_Parallelism); |
5817ff8e PC |
138 | |
139 | template<typename _IIter1, typename _IIter2, typename _Tp, | |
15ac3c72 | 140 | typename _BinaryFunction1, typename _BinaryFunction2> |
5817ff8e PC |
141 | _Tp |
142 | inner_product(_IIter1, _IIter1, _IIter2, _Tp, | |
15ac3c72 | 143 | _BinaryFunction1, _BinaryFunction2); |
5817ff8e PC |
144 | |
145 | template<typename _IIter1, typename _IIter2, typename _Tp, | |
15ac3c72 | 146 | typename _BinaryFunction1, typename _BinaryFunction2> |
5817ff8e PC |
147 | _Tp |
148 | inner_product(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1, | |
15ac3c72 | 149 | _BinaryFunction2, __gnu_parallel::sequential_tag); |
5817ff8e PC |
150 | |
151 | template<typename _IIter1, typename _IIter2, typename _Tp, | |
15ac3c72 | 152 | typename BinaryFunction1, typename BinaryFunction2> |
5817ff8e PC |
153 | _Tp |
154 | inner_product(_IIter1, _IIter1, _IIter2, _Tp, BinaryFunction1, | |
15ac3c72 | 155 | BinaryFunction2, __gnu_parallel::_Parallelism); |
5817ff8e PC |
156 | |
157 | template<typename _RAIter1, typename _RAIter2, typename _Tp, | |
15ac3c72 | 158 | typename BinaryFunction1, typename BinaryFunction2> |
5817ff8e | 159 | _Tp |
1acba85b | 160 | __inner_product_switch(_RAIter1, _RAIter1, _RAIter2, _Tp, BinaryFunction1, |
15ac3c72 JS |
161 | BinaryFunction2, random_access_iterator_tag, |
162 | random_access_iterator_tag, | |
163 | __gnu_parallel::_Parallelism | |
164 | = __gnu_parallel::parallel_unbalanced); | |
5817ff8e PC |
165 | |
166 | template<typename _IIter1, typename _IIter2, typename _Tp, | |
15ac3c72 JS |
167 | typename _BinaryFunction1, typename _BinaryFunction2, |
168 | typename _Tag1, typename _Tag2> | |
5817ff8e | 169 | _Tp |
1acba85b | 170 | __inner_product_switch(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1, |
15ac3c72 | 171 | _BinaryFunction2, _Tag1, _Tag2); |
c2ba9709 JS |
172 | |
173 | ||
174 | template<typename _IIter, typename _OIter> | |
5817ff8e PC |
175 | _OIter |
176 | partial_sum(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag); | |
c2ba9709 JS |
177 | |
178 | template<typename _IIter, typename _OIter, typename _BinaryOper> | |
5817ff8e PC |
179 | _OIter |
180 | partial_sum(_IIter, _IIter, _OIter, _BinaryOper, | |
15ac3c72 | 181 | __gnu_parallel::sequential_tag); |
c2ba9709 JS |
182 | |
183 | template<typename _IIter, typename _OIter> | |
5817ff8e | 184 | _OIter |
1acba85b | 185 | partial_sum(_IIter, _IIter, _OIter __result); |
c2ba9709 JS |
186 | |
187 | template<typename _IIter, typename _OIter, typename _BinaryOper> | |
5817ff8e PC |
188 | _OIter |
189 | partial_sum(_IIter, _IIter, _OIter, _BinaryOper); | |
c2ba9709 | 190 | |
5817ff8e | 191 | template<typename _IIter, typename _OIter, typename _BinaryOper, |
15ac3c72 | 192 | typename _Tag1, typename _Tag2> |
5817ff8e | 193 | _OIter |
1acba85b | 194 | __partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper, _Tag1, _Tag2); |
c2ba9709 JS |
195 | |
196 | template<typename _IIter, typename _OIter, typename _BinaryOper> | |
5817ff8e | 197 | _OIter |
1acba85b | 198 | __partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper, |
15ac3c72 | 199 | random_access_iterator_tag, random_access_iterator_tag); |
c2ba9709 JS |
200 | } // end namespace |
201 | } // end namespace | |
202 | ||
cbcd1e45 | 203 | #endif /* _GLIBCXX_PARALLEL_NUMERICFWD_H */ |