summaryrefslogtreecommitdiff
path: root/pstl/include/pstl/internal/glue_numeric_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'pstl/include/pstl/internal/glue_numeric_impl.h')
-rw-r--r--pstl/include/pstl/internal/glue_numeric_impl.h83
1 files changed, 36 insertions, 47 deletions
diff --git a/pstl/include/pstl/internal/glue_numeric_impl.h b/pstl/include/pstl/internal/glue_numeric_impl.h
index 241b8a3bebc7..ad268b51a16c 100644
--- a/pstl/include/pstl/internal/glue_numeric_impl.h
+++ b/pstl/include/pstl/internal/glue_numeric_impl.h
@@ -59,14 +59,12 @@ __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _Tp __init)
{
+ auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first1, __first2);
+
typedef typename iterator_traits<_ForwardIterator1>::value_type _InputType;
- return __pstl::__internal::__pattern_transform_reduce(
- std::forward<_ExecutionPolicy>(__exec), __first1, __last1, __first2, __init, std::plus<_InputType>(),
- std::multiplies<_InputType>(),
- __pstl::__internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec),
- __pstl::__internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec));
+ return __pstl::__internal::__pattern_transform_reduce(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
+ __first1, __last1, __first2, __init, std::plus<_InputType>(),
+ std::multiplies<_InputType>());
}
template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation1,
@@ -75,12 +73,10 @@ __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _Tp __init, _BinaryOperation1 __binary_op1, _BinaryOperation2 __binary_op2)
{
- return __pstl::__internal::__pattern_transform_reduce(
- std::forward<_ExecutionPolicy>(__exec), __first1, __last1, __first2, __init, __binary_op1, __binary_op2,
- __pstl::__internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec),
- __pstl::__internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec));
+ auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first1, __first2);
+ return __pstl::__internal::__pattern_transform_reduce(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
+ __first1, __last1, __first2, __init, __binary_op1,
+ __binary_op2);
}
template <class _ExecutionPolicy, class _ForwardIterator, class _Tp, class _BinaryOperation, class _UnaryOperation>
@@ -88,10 +84,9 @@ __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _Tp>
transform_reduce(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Tp __init,
_BinaryOperation __binary_op, _UnaryOperation __unary_op)
{
- return __pstl::__internal::__pattern_transform_reduce(
- std::forward<_ExecutionPolicy>(__exec), __first, __last, __init, __binary_op, __unary_op,
- __pstl::__internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator>(__exec),
- __pstl::__internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator>(__exec));
+ auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first);
+ return __pstl::__internal::__pattern_transform_reduce(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
+ __first, __last, __init, __binary_op, __unary_op);
}
// [exclusive.scan]
@@ -101,12 +96,12 @@ __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardItera
exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
_ForwardIterator2 __result, _Tp __init)
{
+ auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first, __result);
+
using namespace __pstl;
- return __internal::__pattern_transform_scan(
- std::forward<_ExecutionPolicy>(__exec), __first, __last, __result, __pstl::__internal::__no_op(), __init,
- std::plus<_Tp>(), /*inclusive=*/std::false_type(),
- __internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(__exec),
- __internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(__exec));
+ return __internal::__pattern_transform_scan(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec), __first, __last,
+ __result, __pstl::__internal::__no_op(), __init, std::plus<_Tp>(),
+ /*inclusive=*/std::false_type());
}
template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp, class _BinaryOperation>
@@ -114,12 +109,12 @@ __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardItera
exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
_ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op)
{
+ auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first, __result);
+
using namespace __pstl;
- return __internal::__pattern_transform_scan(
- std::forward<_ExecutionPolicy>(__exec), __first, __last, __result, __pstl::__internal::__no_op(), __init,
- __binary_op, /*inclusive=*/std::false_type(),
- __internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(__exec),
- __internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(__exec));
+ return __internal::__pattern_transform_scan(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec), __first, __last,
+ __result, __pstl::__internal::__no_op(), __init, __binary_op,
+ /*inclusive=*/std::false_type());
}
// [inclusive.scan]
@@ -161,13 +156,11 @@ transform_exclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _
_ForwardIterator2 __result, _Tp __init, _BinaryOperation __binary_op,
_UnaryOperation __unary_op)
{
- return __pstl::__internal::__pattern_transform_scan(
- std::forward<_ExecutionPolicy>(__exec), __first, __last, __result, __unary_op, __init, __binary_op,
- /*inclusive=*/std::false_type(),
- __pstl::__internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec),
- __pstl::__internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec));
+ auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first, __result);
+
+ return __pstl::__internal::__pattern_transform_scan(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec), __first,
+ __last, __result, __unary_op, __init, __binary_op,
+ /*inclusive=*/std::false_type());
}
// [transform.inclusive.scan]
@@ -179,13 +172,11 @@ transform_inclusive_scan(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _
_ForwardIterator2 __result, _BinaryOperation __binary_op, _UnaryOperation __unary_op,
_Tp __init)
{
- return __pstl::__internal::__pattern_transform_scan(
- std::forward<_ExecutionPolicy>(__exec), __first, __last, __result, __unary_op, __init, __binary_op,
- /*inclusive=*/std::true_type(),
- __pstl::__internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec),
- __pstl::__internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec));
+ auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first, __result);
+
+ return __pstl::__internal::__pattern_transform_scan(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec), __first,
+ __last, __result, __unary_op, __init, __binary_op,
+ /*inclusive=*/std::true_type());
}
template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _UnaryOperation,
@@ -218,12 +209,10 @@ adjacent_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _Forwa
if (__first == __last)
return __d_first;
- return __pstl::__internal::__pattern_adjacent_difference(
- std::forward<_ExecutionPolicy>(__exec), __first, __last, __d_first, __op,
- __pstl::__internal::__is_vectorization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec),
- __pstl::__internal::__is_parallelization_preferred<_ExecutionPolicy, _ForwardIterator1, _ForwardIterator2>(
- __exec));
+ auto __dispatch_tag = __pstl::__internal::__select_backend(__exec, __first, __d_first);
+
+ return __pstl::__internal::__pattern_adjacent_difference(__dispatch_tag, std::forward<_ExecutionPolicy>(__exec),
+ __first, __last, __d_first, __op);
}
template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>