00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef _GLIBCXX_PARALLEL_NUMERICFWD_H
00036 #define _GLIBCXX_PARALLEL_NUMERICFWD_H 1
00037
00038 #pragma GCC system_header
00039
00040 #include <parallel/tags.h>
00041 #include <parallel/settings.h>
00042
00043 namespace std
00044 {
00045 namespace __parallel
00046 {
00047 template<typename _IIter, typename _Tp>
00048 _Tp
00049 accumulate(_IIter, _IIter, _Tp);
00050
00051 template<typename _IIter, typename _Tp>
00052 _Tp
00053 accumulate(_IIter, _IIter, _Tp, __gnu_parallel::sequential_tag);
00054
00055 template<typename _IIter, typename _Tp>
00056 _Tp
00057 accumulate(_IIter, _IIter, _Tp, __gnu_parallel::_Parallelism);
00058
00059 template<typename _IIter, typename _Tp, typename _Tag>
00060 _Tp
00061 accumulate_switch(_IIter, _IIter, _Tp, _Tag);
00062
00063 template<typename _IIter, typename _Tp, typename _BinaryOper>
00064 _Tp
00065 accumulate(_IIter, _IIter, _Tp, _BinaryOper);
00066
00067 template<typename _IIter, typename _Tp, typename _BinaryOper>
00068 _Tp
00069 accumulate(_IIter, _IIter, _Tp, _BinaryOper,
00070 __gnu_parallel::sequential_tag);
00071
00072 template<typename _IIter, typename _Tp, typename _BinaryOper>
00073 _Tp
00074 accumulate(_IIter, _IIter, _Tp, _BinaryOper,
00075 __gnu_parallel::_Parallelism);
00076
00077 template<typename _IIter, typename _Tp, typename _BinaryOper,
00078 typename _Tag>
00079 _Tp
00080 accumulate_switch(_IIter, _IIter, _Tp, _BinaryOper, _Tag);
00081
00082 template<typename _RAIter, typename _Tp, typename _BinaryOper>
00083 _Tp
00084 accumulate_switch(_RAIter, _RAIter, _Tp, _BinaryOper,
00085 random_access_iterator_tag,
00086 __gnu_parallel::_Parallelism);
00087
00088 template<typename _IIter, typename _OIter>
00089 _OIter
00090 adjacent_difference(_IIter, _IIter, _OIter);
00091
00092 template<typename _IIter, typename _OIter, typename _BinaryOper>
00093 _OIter
00094 adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper);
00095
00096 template<typename _IIter, typename _OIter>
00097 _OIter
00098 adjacent_difference(_IIter, _IIter, _OIter,
00099 __gnu_parallel::sequential_tag);
00100
00101 template<typename _IIter, typename _OIter, typename _BinaryOper>
00102 _OIter
00103 adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper,
00104 __gnu_parallel::sequential_tag);
00105
00106 template<typename _IIter, typename _OIter>
00107 _OIter
00108 adjacent_difference(_IIter, _IIter, _OIter,
00109 __gnu_parallel::_Parallelism);
00110
00111 template<typename _IIter, typename _OIter, typename _BinaryOper>
00112 _OIter
00113 adjacent_difference(_IIter, _IIter, _OIter, _BinaryOper,
00114 __gnu_parallel::_Parallelism);
00115
00116 template<typename _IIter, typename _OIter, typename _BinaryOper,
00117 typename _Tag1, typename _Tag2>
00118 _OIter
00119 adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper,
00120 _Tag1, _Tag2);
00121
00122 template<typename _IIter, typename _OIter, typename _BinaryOper>
00123 _OIter
00124 adjacent_difference_switch(_IIter, _IIter, _OIter, _BinaryOper,
00125 random_access_iterator_tag,
00126 random_access_iterator_tag,
00127 __gnu_parallel::_Parallelism);
00128
00129 template<typename _IIter1, typename _IIter2, typename _Tp>
00130 _Tp
00131 inner_product(_IIter1, _IIter1, _IIter2, _Tp);
00132
00133 template<typename _IIter1, typename _IIter2, typename _Tp>
00134 _Tp
00135 inner_product(_IIter1, _IIter1, _IIter2, _Tp,
00136 __gnu_parallel::sequential_tag);
00137
00138 template<typename _IIter1, typename _IIter2, typename _Tp>
00139 _Tp
00140 inner_product(_IIter1, _IIter1, _IIter2, _Tp,
00141 __gnu_parallel::_Parallelism);
00142
00143 template<typename _IIter1, typename _IIter2, typename _Tp,
00144 typename _BinaryFunction1, typename _BinaryFunction2>
00145 _Tp
00146 inner_product(_IIter1, _IIter1, _IIter2, _Tp,
00147 _BinaryFunction1, _BinaryFunction2);
00148
00149 template<typename _IIter1, typename _IIter2, typename _Tp,
00150 typename _BinaryFunction1, typename _BinaryFunction2>
00151 _Tp
00152 inner_product(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1,
00153 _BinaryFunction2, __gnu_parallel::sequential_tag);
00154
00155 template<typename _IIter1, typename _IIter2, typename _Tp,
00156 typename BinaryFunction1, typename BinaryFunction2>
00157 _Tp
00158 inner_product(_IIter1, _IIter1, _IIter2, _Tp, BinaryFunction1,
00159 BinaryFunction2, __gnu_parallel::_Parallelism);
00160
00161 template<typename _RAIter1, typename _RAIter2, typename _Tp,
00162 typename BinaryFunction1, typename BinaryFunction2>
00163 _Tp
00164 inner_product_switch(_RAIter1, _RAIter1, _RAIter2, _Tp, BinaryFunction1,
00165 BinaryFunction2, random_access_iterator_tag,
00166 random_access_iterator_tag,
00167 __gnu_parallel::_Parallelism);
00168
00169 template<typename _IIter1, typename _IIter2, typename _Tp,
00170 typename _BinaryFunction1, typename _BinaryFunction2,
00171 typename _Tag1, typename _Tag2>
00172 _Tp
00173 inner_product_switch(_IIter1, _IIter1, _IIter2, _Tp, _BinaryFunction1,
00174 _BinaryFunction2, _Tag1, _Tag2);
00175
00176
00177 template<typename _IIter, typename _OIter>
00178 _OIter
00179 partial_sum(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag);
00180
00181 template<typename _IIter, typename _OIter, typename _BinaryOper>
00182 _OIter
00183 partial_sum(_IIter, _IIter, _OIter, _BinaryOper,
00184 __gnu_parallel::sequential_tag);
00185
00186 template<typename _IIter, typename _OIter>
00187 _OIter
00188 partial_sum(_IIter, _IIter, _OIter result);
00189
00190 template<typename _IIter, typename _OIter, typename _BinaryOper>
00191 _OIter
00192 partial_sum(_IIter, _IIter, _OIter, _BinaryOper);
00193
00194 template<typename _IIter, typename _OIter, typename _BinaryOper,
00195 typename _Tag1, typename _Tag2>
00196 _OIter
00197 partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper, _Tag1, _Tag2);
00198
00199 template<typename _IIter, typename _OIter, typename _BinaryOper>
00200 _OIter
00201 partial_sum_switch(_IIter, _IIter, _OIter, _BinaryOper,
00202 random_access_iterator_tag, random_access_iterator_tag);
00203 }
00204 }
00205
00206 #endif