Skip to content

Commit b0b9a58

Browse files
authored
Untag dispatch <execution> (#2662)
1 parent a10c471 commit b0b9a58

File tree

1 file changed

+14
-44
lines changed

1 file changed

+14
-44
lines changed

stl/inc/execution

Lines changed: 14 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4424,33 +4424,18 @@ _FwdIt2 exclusive_scan(_ExPo&&, const _FwdIt1 _First, const _FwdIt1 _Last, _FwdI
44244424
return _Dest;
44254425
}
44264426

4427-
template <class _FwdIt1, class _FwdIt2, class _BinOp, class _Ty>
4428-
_FwdIt2 _Inclusive_scan_per_chunk(
4429-
_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op, _Ty& _Val, _No_init_tag) {
4430-
// Local-sum for parallel inclusive_scan; writes local inclusive prefix sums into _Dest and stores overall sum in
4431-
// _Val.
4432-
// pre: _Val is *uninitialized* && _First != _Last
4433-
_Construct_in_place(_Val, *_First);
4434-
for (;;) {
4435-
*_Dest = _Val;
4436-
++_Dest;
4437-
++_First;
4438-
if (_First == _Last) {
4439-
return _Dest;
4440-
}
4441-
4442-
_Val = _Reduce_op(_STD move(_Val), *_First);
4443-
}
4444-
}
4445-
4446-
template <class _FwdIt1, class _FwdIt2, class _BinOp, class _Ty, class _Ty_fwd,
4447-
enable_if_t<!is_same_v<_No_init_tag, remove_const_t<remove_reference_t<_Ty_fwd>>>, int> = 0>
4427+
template <class _FwdIt1, class _FwdIt2, class _BinOp, class _Ty, class _Ty_fwd>
44484428
_FwdIt2 _Inclusive_scan_per_chunk(
44494429
_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op, _Ty& _Val, _Ty_fwd&& _Predecessor) {
44504430
// local-sum for parallel inclusive_scan; writes local inclusive prefix sums into _Dest and stores overall sum in
44514431
// _Val.
44524432
// pre: _Val is *uninitialized* && _First != _Last
4453-
_Construct_in_place(_Val, _Reduce_op(_STD forward<_Ty_fwd>(_Predecessor), *_First));
4433+
if constexpr (is_same_v<_No_init_tag, remove_const_t<remove_reference_t<_Ty_fwd>>>) {
4434+
_Construct_in_place(_Val, *_First);
4435+
} else {
4436+
_Construct_in_place(_Val, _Reduce_op(_STD forward<_Ty_fwd>(_Predecessor), *_First));
4437+
}
4438+
44544439
for (;;) {
44554440
*_Dest = _Val;
44564441
++_Dest;
@@ -4756,33 +4741,18 @@ _FwdIt2 transform_exclusive_scan(_ExPo&&, const _FwdIt1 _First, const _FwdIt1 _L
47564741
return _Dest;
47574742
}
47584743

4759-
template <class _FwdIt1, class _FwdIt2, class _BinOp, class _UnaryOp, class _Ty>
4760-
_FwdIt2 _Transform_inclusive_scan_per_chunk(_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op,
4761-
_UnaryOp _Transform_op, _Ty& _Val, _No_init_tag) {
4762-
// Local-sum for parallel transform_inclusive_scan; writes local inclusive prefix sums into _Dest and stores overall
4763-
// sum in _Val.
4764-
// pre: _Val is *uninitialized* && _First != _Last
4765-
_Construct_in_place(_Val, _Transform_op(*_First));
4766-
for (;;) {
4767-
*_Dest = _Val;
4768-
++_Dest;
4769-
++_First;
4770-
if (_First == _Last) {
4771-
return _Dest;
4772-
}
4773-
4774-
_Val = _Reduce_op(_STD move(_Val), _Transform_op(*_First));
4775-
}
4776-
}
4777-
4778-
template <class _FwdIt1, class _FwdIt2, class _BinOp, class _UnaryOp, class _Ty, class _Ty_fwd,
4779-
enable_if_t<!is_same_v<_No_init_tag, remove_const_t<remove_reference_t<_Ty_fwd>>>, int> = 0>
4744+
template <class _FwdIt1, class _FwdIt2, class _BinOp, class _UnaryOp, class _Ty, class _Ty_fwd>
47804745
_FwdIt2 _Transform_inclusive_scan_per_chunk(_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op,
47814746
_UnaryOp _Transform_op, _Ty& _Val, _Ty_fwd&& _Predecessor) {
47824747
// local-sum for parallel transform_inclusive_scan; writes local inclusive prefix sums into _Dest and stores overall
47834748
// sum in _Val
47844749
// pre: _Val is *uninitialized* && _First != _Last
4785-
_Construct_in_place(_Val, _Reduce_op(_STD forward<_Ty_fwd>(_Predecessor), _Transform_op(*_First)));
4750+
if constexpr (is_same_v<_No_init_tag, remove_const_t<remove_reference_t<_Ty_fwd>>>) {
4751+
_Construct_in_place(_Val, _Transform_op(*_First));
4752+
} else {
4753+
_Construct_in_place(_Val, _Reduce_op(_STD forward<_Ty_fwd>(_Predecessor), _Transform_op(*_First)));
4754+
}
4755+
47864756
for (;;) {
47874757
*_Dest = _Val;
47884758
++_Dest;

0 commit comments

Comments
 (0)