1 // <parallel/numeric> Forward declarations -*- C++ -*-
2 
3 // Copyright (C) 2007-2018 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