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