1 // <parallel/numeric> Forward declarations -*- C++ -*-
3 // Copyright (C) 2007-2017 Free Software Foundation, Inc.
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
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.
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.
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/>.
25 /** @file parallel/numericfwd.h
26 * This file is a GNU parallel extension to the Standard C++ Library.
29 #ifndef _GLIBCXX_PARALLEL_NUMERICFWD_H
30 #define _GLIBCXX_PARALLEL_NUMERICFWD_H 1
32 #pragma GCC system_header
34 #include <parallel/tags.h>
35 #include <parallel/settings.h>
37 namespace std
_GLIBCXX_VISIBILITY(default)
41 template<typename _IIter
, typename _Tp
>
43 accumulate(_IIter
, _IIter
, _Tp
);
45 template<typename _IIter
, typename _Tp
>
47 accumulate(_IIter
, _IIter
, _Tp
, __gnu_parallel::sequential_tag
);
49 template<typename _IIter
, typename _Tp
>
51 accumulate(_IIter
, _IIter
, _Tp
, __gnu_parallel::_Parallelism
);
53 template<typename _IIter
, typename _Tp
, typename _Tag
>
55 __accumulate_switch(_IIter
, _IIter
, _Tp
, _Tag
);
57 template<typename _IIter
, typename _Tp
, typename _BinaryOper
>
59 accumulate(_IIter
, _IIter
, _Tp
, _BinaryOper
);
61 template<typename _IIter
, typename _Tp
, typename _BinaryOper
>
63 accumulate(_IIter
, _IIter
, _Tp
, _BinaryOper
,
64 __gnu_parallel::sequential_tag
);
66 template<typename _IIter
, typename _Tp
, typename _BinaryOper
>
68 accumulate(_IIter
, _IIter
, _Tp
, _BinaryOper
,
69 __gnu_parallel::_Parallelism
);
71 template<typename _IIter
, typename _Tp
, typename _BinaryOper
,
74 __accumulate_switch(_IIter
, _IIter
, _Tp
, _BinaryOper
, _Tag
);
76 template<typename _RAIter
, typename _Tp
, typename _BinaryOper
>
78 __accumulate_switch(_RAIter
, _RAIter
, _Tp
, _BinaryOper
,
79 random_access_iterator_tag
,
80 __gnu_parallel::_Parallelism __parallelism
81 = __gnu_parallel::parallel_unbalanced
);
83 template<typename _IIter
, typename _OIter
>
85 adjacent_difference(_IIter
, _IIter
, _OIter
);
87 template<typename _IIter
, typename _OIter
, typename _BinaryOper
>
89 adjacent_difference(_IIter
, _IIter
, _OIter
, _BinaryOper
);
91 template<typename _IIter
, typename _OIter
>
93 adjacent_difference(_IIter
, _IIter
, _OIter
,
94 __gnu_parallel::sequential_tag
);
96 template<typename _IIter
, typename _OIter
, typename _BinaryOper
>
98 adjacent_difference(_IIter
, _IIter
, _OIter
, _BinaryOper
,
99 __gnu_parallel::sequential_tag
);
101 template<typename _IIter
, typename _OIter
>
103 adjacent_difference(_IIter
, _IIter
, _OIter
,
104 __gnu_parallel::_Parallelism
);
106 template<typename _IIter
, typename _OIter
, typename _BinaryOper
>
108 adjacent_difference(_IIter
, _IIter
, _OIter
, _BinaryOper
,
109 __gnu_parallel::_Parallelism
);
111 template<typename _IIter
, typename _OIter
, typename _BinaryOper
,
112 typename _Tag1
, typename _Tag2
>
114 __adjacent_difference_switch(_IIter
, _IIter
, _OIter
, _BinaryOper
,
117 template<typename _IIter
, typename _OIter
, typename _BinaryOper
>
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
);
125 template<typename _IIter1
, typename _IIter2
, typename _Tp
>
127 inner_product(_IIter1
, _IIter1
, _IIter2
, _Tp
);
129 template<typename _IIter1
, typename _IIter2
, typename _Tp
>
131 inner_product(_IIter1
, _IIter1
, _IIter2
, _Tp
,
132 __gnu_parallel::sequential_tag
);
134 template<typename _IIter1
, typename _IIter2
, typename _Tp
>
136 inner_product(_IIter1
, _IIter1
, _IIter2
, _Tp
,
137 __gnu_parallel::_Parallelism
);
139 template<typename _IIter1
, typename _IIter2
, typename _Tp
,
140 typename _BinaryFunction1
, typename _BinaryFunction2
>
142 inner_product(_IIter1
, _IIter1
, _IIter2
, _Tp
,
143 _BinaryFunction1
, _BinaryFunction2
);
145 template<typename _IIter1
, typename _IIter2
, typename _Tp
,
146 typename _BinaryFunction1
, typename _BinaryFunction2
>
148 inner_product(_IIter1
, _IIter1
, _IIter2
, _Tp
, _BinaryFunction1
,
149 _BinaryFunction2
, __gnu_parallel::sequential_tag
);
151 template<typename _IIter1
, typename _IIter2
, typename _Tp
,
152 typename BinaryFunction1
, typename BinaryFunction2
>
154 inner_product(_IIter1
, _IIter1
, _IIter2
, _Tp
, BinaryFunction1
,
155 BinaryFunction2
, __gnu_parallel::_Parallelism
);
157 template<typename _RAIter1
, typename _RAIter2
, typename _Tp
,
158 typename BinaryFunction1
, typename BinaryFunction2
>
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
);
166 template<typename _IIter1
, typename _IIter2
, typename _Tp
,
167 typename _BinaryFunction1
, typename _BinaryFunction2
,
168 typename _Tag1
, typename _Tag2
>
170 __inner_product_switch(_IIter1
, _IIter1
, _IIter2
, _Tp
, _BinaryFunction1
,
171 _BinaryFunction2
, _Tag1
, _Tag2
);
174 template<typename _IIter
, typename _OIter
>
176 partial_sum(_IIter
, _IIter
, _OIter
, __gnu_parallel::sequential_tag
);
178 template<typename _IIter
, typename _OIter
, typename _BinaryOper
>
180 partial_sum(_IIter
, _IIter
, _OIter
, _BinaryOper
,
181 __gnu_parallel::sequential_tag
);
183 template<typename _IIter
, typename _OIter
>
185 partial_sum(_IIter
, _IIter
, _OIter __result
);
187 template<typename _IIter
, typename _OIter
, typename _BinaryOper
>
189 partial_sum(_IIter
, _IIter
, _OIter
, _BinaryOper
);
191 template<typename _IIter
, typename _OIter
, typename _BinaryOper
,
192 typename _Tag1
, typename _Tag2
>
194 __partial_sum_switch(_IIter
, _IIter
, _OIter
, _BinaryOper
, _Tag1
, _Tag2
);
196 template<typename _IIter
, typename _OIter
, typename _BinaryOper
>
198 __partial_sum_switch(_IIter
, _IIter
, _OIter
, _BinaryOper
,
199 random_access_iterator_tag
, random_access_iterator_tag
);
203 #endif /* _GLIBCXX_PARALLEL_NUMERICFWD_H */