1 // -*- C++ -*- 2 //===-- glue_numeric_defs.h -----------------------------------------------===// 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 "execution_defs.h" 14 15 namespace std 16 { 17 // [reduce] 18 19 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _BinaryOperation> 20 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 21 reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init, 22 _BinaryOperation __binary_op); 23 24 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp> 25 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 26 reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init); 27 28 template <class _ExecutionPolicy, class _ForwardIterator> 29 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, 30 typename iterator_traits<_ForwardIterator>::value_type> 31 reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last); 32 33 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp> 34 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 35 transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 36 _ForwardIterator2 __first2, _Tp __init); 37 38 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation1, 39 class _BinaryOperation2> 40 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 41 transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, 42 _ForwardIterator2 __first2, _Tp __init, _BinaryOperation1 __binary_op1, 43 _BinaryOperation2 __binary_op2); 44 45 template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _BinaryOperation, class _UnaryOperation> 46 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp> 47 transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init, 48 _BinaryOperation __binary_op, _UnaryOperation __unary_op); 49 50 // [exclusive.scan] 51 52 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp> 53 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 54 exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 55 _ForwardIterator2 __result, _Tp __init); 56 57 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation> 58 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 59 exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 60 _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op); 61 62 // [inclusive.scan] 63 64 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 65 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 66 inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 67 _ForwardIterator2 __result); 68 69 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryOperation> 70 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 71 inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 72 _ForwardIterator2 __result, _BinaryOperation __binary_op); 73 74 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, 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, _Tp __init); 78 79 // [transform.exclusive.scan] 80 81 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation, 82 class _UnaryOperation> 83 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 84 transform_exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 85 _ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op, 86 _UnaryOperation __unary_op); 87 88 // [transform.inclusive.scan] 89 90 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryOperation, 91 class _UnaryOperation, class _Tp> 92 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 93 transform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 94 _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op, 95 _Tp __init); 96 97 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _UnaryOperation, 98 class _BinaryOperation> 99 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 100 transform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 101 _ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op); 102 103 // [adjacent.difference] 104 105 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryOperation> 106 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 107 adjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 108 _ForwardIterator2 __d_first, _BinaryOperation op); 109 110 template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2> 111 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2> 112 adjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, 113 _ForwardIterator2 __d_first); 114 115 } // namespace std 116 #endif /* _PSTL_GLUE_NUMERIC_DEFS_H */ 117