xref: /llvm-project/pstl/include/pstl/internal/glue_numeric_defs.h (revision 36b8d02c8df4d2c9afd687c69d9adfc50afec220)
1 // -*- C++ -*-
2 //===----------------------------------------------------------------------===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef _PSTL_GLUE_NUMERIC_DEFS_H
11 #define _PSTL_GLUE_NUMERIC_DEFS_H
12 
13 #include <iterator>
14 
15 #include "execution_defs.h"
16 #include "pstl_config.h"
17 
18 _PSTL_HIDE_FROM_ABI_PUSH
19 
20 namespace std
21 {
22 // [reduce]
23 
24 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _BinaryOperation>
25 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
26 reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init,
27        _BinaryOperation __binary_op);
28 
29 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp>
30 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
31 reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init);
32 
33 template <class _ExecutionPolicy, class _ForwardIterator>
34 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy,
35                                                  typename iterator_traits<_ForwardIterator>::value_type>
36 reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last);
37 
38 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp>
39 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
40 transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
41                  _ForwardIterator2 __first2, _Tp __init);
42 
43 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation1,
44           class _BinaryOperation2>
45 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
46 transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
47                  _ForwardIterator2 __first2, _Tp __init, _BinaryOperation1 __binary_op1,
48                  _BinaryOperation2 __binary_op2);
49 
50 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _BinaryOperation, class _UnaryOperation>
51 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
52 transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init,
53                  _BinaryOperation __binary_op, _UnaryOperation __unary_op);
54 
55 // [exclusive.scan]
56 
57 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp>
58 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
59 exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
60                _ForwardIterator2 __result, _Tp __init);
61 
62 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation>
63 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
64 exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
65                _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op);
66 
67 // [inclusive.scan]
68 
69 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
70 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
71 inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
72                _ForwardIterator2 __result);
73 
74 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryOperation>
75 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
76 inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
77                _ForwardIterator2 __result, _BinaryOperation __binary_op);
78 
79 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation>
80 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
81 inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
82                _ForwardIterator2 __result, _BinaryOperation __binary_op, _Tp __init);
83 
84 // [transform.exclusive.scan]
85 
86 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation,
87           class _UnaryOperation>
88 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
89 transform_exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
90                          _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op,
91                          _UnaryOperation __unary_op);
92 
93 // [transform.inclusive.scan]
94 
95 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryOperation,
96           class _UnaryOperation, class _Tp>
97 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
98 transform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
99                          _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op,
100                          _Tp __init);
101 
102 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _UnaryOperation,
103           class _BinaryOperation>
104 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
105 transform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
106                          _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op);
107 
108 // [adjacent.difference]
109 
110 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryOperation>
111 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
112 adjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
113                     _ForwardIterator2 __d_first, _BinaryOperation op);
114 
115 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
116 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
117 adjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
118                     _ForwardIterator2 __d_first);
119 
120 } // namespace std
121 
122 _PSTL_HIDE_FROM_ABI_POP
123 
124 #endif /* _PSTL_GLUE_NUMERIC_DEFS_H */
125