Skip to content

Commit dff8dce

Browse files
committed
Allow using counting_iterator with datapar policies
Signed-off-by: Hartmut Kaiser <hartmut.kaiser@gmail.com>
1 parent ac34da2 commit dff8dce

6 files changed

Lines changed: 385 additions & 161 deletions

File tree

libs/core/algorithms/include/hpx/parallel/algorithms/count.hpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -272,9 +272,9 @@ namespace hpx::parallel {
272272
count_iteration& operator=(count_iteration&&) = default;
273273

274274
template <typename Iter>
275-
HPX_HOST_DEVICE HPX_FORCEINLINE constexpr
276-
typename std::iterator_traits<Iter>::difference_type
277-
operator()(Iter part_begin, std::size_t part_size)
275+
HPX_HOST_DEVICE HPX_FORCEINLINE constexpr std::iterator_traits<
276+
Iter>::difference_type
277+
operator()(Iter part_begin, std::size_t part_size)
278278
{
279279
typename std::iterator_traits<Iter>::difference_type ret = 0;
280280
util::loop_n<execution_policy_type>(part_begin, part_size,
@@ -283,8 +283,8 @@ namespace hpx::parallel {
283283
}
284284

285285
template <typename Iter>
286-
HPX_HOST_DEVICE HPX_FORCEINLINE constexpr void operator()(Iter curr,
287-
typename std::iterator_traits<Iter>::difference_type& ret)
286+
HPX_HOST_DEVICE HPX_FORCEINLINE constexpr void operator()(
287+
Iter curr, std::iterator_traits<Iter>::difference_type& ret)
288288
{
289289
ret += traits::count_bits(
290290
HPX_INVOKE(op_, HPX_INVOKE(proj_, *curr)));
@@ -295,7 +295,7 @@ namespace hpx::parallel {
295295
HPX_CXX_CORE_EXPORT template <typename Value>
296296
struct count : public algorithm<count<Value>, Value>
297297
{
298-
typedef Value difference_type;
298+
using difference_type = Value;
299299

300300
constexpr count() noexcept
301301
: algorithm<count, Value>("count")
@@ -429,7 +429,7 @@ namespace hpx {
429429
{
430430
private:
431431
template <typename ExPolicy, typename FwdIter,
432-
typename T = typename std::iterator_traits<FwdIter>::value_type>
432+
typename T = std::iterator_traits<FwdIter>::value_type>
433433
// clang-format off
434434
requires (
435435
hpx::is_execution_policy_v<ExPolicy> &&
@@ -443,28 +443,28 @@ namespace hpx {
443443
"Required at least forward iterator.");
444444

445445
using difference_type =
446-
typename std::iterator_traits<FwdIter>::difference_type;
446+
std::iterator_traits<FwdIter>::difference_type;
447447

448448
return hpx::parallel::detail::count<difference_type>().call(
449449
HPX_FORWARD(ExPolicy, policy), first, last, value,
450450
hpx::identity_v);
451451
}
452452

453453
template <typename InIter,
454-
typename T = typename std::iterator_traits<InIter>::value_type>
454+
typename T = std::iterator_traits<InIter>::value_type>
455455
// clang-format off
456456
requires (
457457
hpx::traits::is_iterator_v<InIter>
458458
)
459459
// clang-format on
460-
friend typename std::iterator_traits<InIter>::difference_type
460+
friend std::iterator_traits<InIter>::difference_type
461461
tag_fallback_invoke(count_t, InIter first, InIter last, T const& value)
462462
{
463463
static_assert(std::input_iterator<InIter>,
464464
"Required at least input iterator.");
465465

466466
using difference_type =
467-
typename std::iterator_traits<InIter>::difference_type;
467+
std::iterator_traits<InIter>::difference_type;
468468

469469
return hpx::parallel::detail::count<difference_type>().call(
470470
hpx::execution::seq, first, last, value, hpx::identity_v);
@@ -494,7 +494,7 @@ namespace hpx {
494494
"Required at least forward iterator.");
495495

496496
using difference_type =
497-
typename std::iterator_traits<FwdIter>::difference_type;
497+
std::iterator_traits<FwdIter>::difference_type;
498498

499499
return hpx::parallel::detail::count_if<difference_type>().call(
500500
HPX_FORWARD(ExPolicy, policy), first, last, HPX_MOVE(f),
@@ -510,14 +510,14 @@ namespace hpx {
510510
>
511511
)
512512
// clang-format on
513-
friend typename std::iterator_traits<InIter>::difference_type
513+
friend std::iterator_traits<InIter>::difference_type
514514
tag_fallback_invoke(count_if_t, InIter first, InIter last, F f)
515515
{
516516
static_assert(std::input_iterator<InIter>,
517517
"Required at least input iterator.");
518518

519519
using difference_type =
520-
typename std::iterator_traits<InIter>::difference_type;
520+
std::iterator_traits<InIter>::difference_type;
521521

522522
return hpx::parallel::detail::count_if<difference_type>().call(
523523
hpx::execution::seq, first, last, HPX_MOVE(f), hpx::identity_v);

0 commit comments

Comments
 (0)