1616
1717struct partition_hooks_parameters
1818{
19- explicit partition_hooks_parameters (std::size_t max_partitions)
20- : values_(max_partitions, {0 , 0 })
21- , seen_(max_partitions, 0 )
19+ explicit partition_hooks_parameters () = default;
20+
21+ template <typename Executor>
22+ friend void tag_override_invoke (
23+ hpx::execution::experimental::collect_execution_parameters_t ,
24+ partition_hooks_parameters& self, Executor&&, std::size_t const ,
25+ std::size_t const , std::size_t const num_chunks,
26+ std::size_t const ) noexcept
2227 {
28+ self.num_chunks_ = num_chunks;
29+ self.values_ .resize (num_chunks);
30+ self.seen_ .resize (num_chunks);
2331 }
2432
2533 template <typename Executor>
@@ -43,6 +51,7 @@ struct partition_hooks_parameters
4351
4452 std::vector<std::pair<std::size_t , std::size_t >> values_;
4553 std::vector<unsigned char > seen_;
54+ std::size_t num_chunks_ = 0 ;
4655};
4756
4857namespace hpx ::execution::experimental {
@@ -61,17 +70,15 @@ void test_mark_partition_sync()
6170 std::iota (left.begin (), left.end (), std::uint64_t (0 ));
6271 std::iota (right.begin (), right.end (), std::uint64_t (left.size ()));
6372
64- partition_hooks_parameters params (left.size () + right.size ());
65- hpx::execution::experimental::chunking_parameters param{};
66- hpx::execution::experimental::collect_chunking_parameters ccp (param);
73+ partition_hooks_parameters params;
6774
68- auto policy = hpx::execution::par.with (std::ref (params), ccp );
75+ auto policy = hpx::execution::par.with (std::ref (params));
6976 hpx::merge (policy, left.begin (), left.end (), right.begin (), right.end (),
7077 out.begin ());
7178
7279 HPX_TEST (std::is_sorted (out.begin (), out.end ()));
73- HPX_TEST_LT (std::size_t (0 ), param. num_chunks );
74- HPX_TEST_EQ (params.count_seen (), param. num_chunks );
80+ HPX_TEST_LT (std::size_t (0 ), params. num_chunks_ );
81+ HPX_TEST_EQ (params.count_seen (), params. num_chunks_ );
7582}
7683
7784void test_mark_partition_async ()
@@ -83,20 +90,18 @@ void test_mark_partition_async()
8390 std::iota (left.begin (), left.end (), std::uint64_t (0 ));
8491 std::iota (right.begin (), right.end (), std::uint64_t (left.size ()));
8592
86- hpx::execution::experimental::chunking_parameters param{};
87- hpx::execution::experimental::collect_chunking_parameters ccp (param);
88- partition_hooks_parameters params (left.size () + right.size ());
93+ partition_hooks_parameters params;
8994
9095 auto policy =
91- hpx::execution::par (hpx::execution::task).with (std::ref (params), ccp );
96+ hpx::execution::par (hpx::execution::task).with (std::ref (params));
9297 auto f = hpx::merge (policy, left.begin (), left.end (), right.begin (),
9398 right.end (), out.begin ());
9499 auto result_iter = f.get ();
95100 HPX_UNUSED (result_iter);
96101
97102 HPX_TEST (std::is_sorted (out.begin (), out.end ()));
98- HPX_TEST_LT (std::size_t (0 ), param. num_chunks );
99- HPX_TEST_EQ (params.count_seen (), param. num_chunks );
103+ HPX_TEST_LT (std::size_t (0 ), params. num_chunks_ );
104+ HPX_TEST_EQ (params.count_seen (), params. num_chunks_ );
100105}
101106
102107int hpx_main ()
0 commit comments