1289177Speter// -*- C++ -*-
2289177Speter//===-- glue_numeric_defs.h -----------------------------------------------===//
3289177Speter//
4289177Speter// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5289177Speter// See https://llvm.org/LICENSE.txt for license information.
6289177Speter// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7289177Speter//
8289177Speter//===----------------------------------------------------------------------===//
9289177Speter
10289177Speter#ifndef _PSTL_GLUE_NUMERIC_DEFS_H
11289177Speter#define _PSTL_GLUE_NUMERIC_DEFS_H
12289177Speter
13289177Speter#include "execution_defs.h"
14289177Speter
15289177Speternamespace std
16289177Speter{
17289177Speter// [reduce]
18289177Speter
19289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _BinaryOperation>
20289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
21289177Speterreduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init,
22289177Speter       _BinaryOperation __binary_op);
23362181Sdim
24362181Sdimtemplate <class _ExecutionPolicy, class _ForwardIterator, class _Tp>
25289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
26289177Speterreduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init);
27289177Speter
28289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator>
29289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy,
30289177Speter                                                 typename iterator_traits<_ForwardIterator>::value_type>
31289177Speterreduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last);
32289177Speter
33289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp>
34289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
35289177Spetertransform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
36289177Speter                 _ForwardIterator2 __first2, _Tp __init);
37289177Speter
38289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation1,
39289177Speter          class _BinaryOperation2>
40289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
41289177Spetertransform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
42289177Speter                 _ForwardIterator2 __first2, _Tp __init, _BinaryOperation1 __binary_op1,
43289177Speter                 _BinaryOperation2 __binary_op2);
44289177Speter
45289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _BinaryOperation, class _UnaryOperation>
46289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
47289177Spetertransform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init,
48289177Speter                 _BinaryOperation __binary_op, _UnaryOperation __unary_op);
49289177Speter
50289177Speter// [exclusive.scan]
51289177Speter
52289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp>
53289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
54289177Speterexclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
55289177Speter               _ForwardIterator2 __result, _Tp __init);
56289177Speter
57289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation>
58289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
59289177Speterexclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
60289177Speter               _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op);
61289177Speter
62289177Speter// [inclusive.scan]
63289177Speter
64289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
65289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
66289177Speterinclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
67362181Sdim               _ForwardIterator2 __result);
68362181Sdim
69289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryOperation>
70289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
71289177Speterinclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
72289177Speter               _ForwardIterator2 __result, _BinaryOperation __binary_op);
73289177Speter
74289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation>
75289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
76289177Speterinclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
77289177Speter               _ForwardIterator2 __result, _BinaryOperation __binary_op, _Tp __init);
78289177Speter
79289177Speter// [transform.exclusive.scan]
80289177Speter
81289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation,
82289177Speter          class _UnaryOperation>
83289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
84289177Spetertransform_exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
85289177Speter                         _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op,
86289177Speter                         _UnaryOperation __unary_op);
87289177Speter
88289177Speter// [transform.inclusive.scan]
89289177Speter
90289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryOperation,
91289177Speter          class _UnaryOperation, class _Tp>
92289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
93289177Spetertransform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
94289177Speter                         _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op,
95289177Speter                         _Tp __init);
96289177Speter
97289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _UnaryOperation,
98289177Speter          class _BinaryOperation>
99289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
100289177Spetertransform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
101289177Speter                         _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op);
102289177Speter
103289177Speter// [adjacent.difference]
104289177Speter
105289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryOperation>
106289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
107289177Speteradjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
108289177Speter                    _ForwardIterator2 __d_first, _BinaryOperation op);
109289177Speter
110289177Spetertemplate <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
111289177Speter__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
112289177Speteradjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
113289177Speter                    _ForwardIterator2 __d_first);
114289177Speter
115289177Speter} // namespace std
116289177Speter#endif /* _PSTL_GLUE_NUMERIC_DEFS_H */
117289177Speter