@@ -60,19 +60,19 @@ STDEXEC_PRAGMA_IGNORE_GNU("-Wmissing-braces")
6060
6161namespace ex = stdexec;
6262
63- namespace repeat_n_detail
63+ namespace _repeat_n
6464{
6565 template <class Sender , class Closure >
66- struct repeat_n_sender_t ;
67- } // namespace repeat_n_detail
66+ struct sender ;
67+ } // namespace _repeat_n
6868
6969struct repeat_n_t
7070{
7171 template <ex::sender Sender, ex::__sender_adaptor_closure Closure>
7272 auto operator ()(Sender __sndr, std::size_t n, Closure closure) const noexcept
73- -> repeat_n_detail::repeat_n_sender_t <Sender, Closure>
73+ -> _repeat_n::sender <Sender, Closure>
7474 {
75- return repeat_n_detail:: repeat_n_sender_t <Sender, Closure>{
75+ return _repeat_n::sender <Sender, Closure>{
7676 {},
7777 {closure, n},
7878 std::move (__sndr)
@@ -88,9 +88,8 @@ struct repeat_n_t
8888
8989inline constexpr repeat_n_t repeat_n{};
9090
91- namespace repeat_n_detail
91+ namespace _repeat_n
9292{
93-
9493 template <class OpT >
9594 class receiver_2_t
9695 {
@@ -245,11 +244,11 @@ namespace repeat_n_detail
245244 };
246245
247246 template <class Sender , class Closure >
248- struct repeat_n_sender_t
247+ struct sender
249248 {
250249 using sender_concept = ex::sender_t ;
251250
252- template <class >
251+ template <class , class Env >
253252 static consteval auto get_completion_signatures () noexcept
254253 {
255254 return ex::completion_signatures<
@@ -260,11 +259,11 @@ namespace repeat_n_detail
260259 >();
261260 }
262261
263- template <ex::__decays_to<repeat_n_sender_t > Self, ex::receiver Receiver>
262+ template <ex::__decays_to<sender > Self, ex::receiver Receiver>
264263 STDEXEC_EXPLICIT_THIS_BEGIN (auto connect)(this Self&& self, Receiver r)
265- -> repeat_n_detail ::operation_state_t <Sender, Closure, Receiver>
264+ -> _repeat_n ::operation_state_t <Sender, Closure, Receiver>
266265 {
267- return repeat_n_detail ::operation_state_t <Sender, Closure, Receiver>(
266+ return _repeat_n ::operation_state_t <Sender, Closure, Receiver>(
268267 static_cast <Self&&>(self).sender_ ,
269268 static_cast <Self&&>(self).data_ .first ,
270269 static_cast <Receiver&&>(r),
@@ -283,26 +282,25 @@ namespace repeat_n_detail
283282 std::pair<Closure, std::size_t > data_;
284283 Sender sender_;
285284 };
286- } // namespace repeat_n_detail
285+ } // namespace _repeat_n
287286
288287namespace STDEXEC
289288{
290289 template <class Sender , class Closure >
291- inline constexpr std::size_t
292- __structured_binding_size_v<repeat_n_detail::repeat_n_sender_t <Sender, Closure>> = 3 ;
290+ inline constexpr std::size_t __structured_binding_size_v<_repeat_n::sender<Sender, Closure>> = 3 ;
293291} // namespace STDEXEC
294292
295293#if STDEXEC_CUDA_COMPILATION()
296294// A CUDA stream implementation of repeat_n
297295namespace nv ::execution::_strm
298296{
299- namespace repeat_n
297+ namespace _repeat_n
300298 {
301299 template <class OpT >
302300 class receiver_2_t : public stream_receiver_base
303301 {
304- using Sender = OpT::PredSender ;
305- using Receiver = OpT::Receiver ;
302+ using Sender = OpT::child_t ;
303+ using Receiver = OpT::receiver_t ;
306304
307305 OpT& op_state_;
308306
@@ -353,11 +351,15 @@ namespace nv::execution::_strm
353351 template <class OpT >
354352 class receiver_1_t : public stream_receiver_base
355353 {
356- using Receiver = OpT::Receiver ;
354+ using Receiver = OpT::receiver_t ;
357355
358356 OpT& op_state_;
359357
360358 public:
359+ explicit receiver_1_t (OpT& op_state)
360+ : op_state_(op_state)
361+ {}
362+
361363 void set_value () noexcept
362364 {
363365 using inner_op_state_t = OpT::inner_op_state_t ;
@@ -394,15 +396,13 @@ namespace nv::execution::_strm
394396 {
395397 return op_state_.make_env ();
396398 }
397-
398- explicit receiver_1_t (OpT& op_state)
399- : op_state_(op_state)
400- {}
401399 };
402400
403401 template <class PredSender , class Closure , class Receiver >
404402 struct operation_state_t : _strm::opstate_base<Receiver>
405403 {
404+ using receiver_t = Receiver;
405+ using child_t = PredSender;
406406 using Scheduler = std::invoke_result_t <ex::get_completion_scheduler_t <ex::set_value_t >,
407407 ex::env_of_t <PredSender>,
408408 ex::env_of_t <Receiver>>;
@@ -445,7 +445,7 @@ namespace nv::execution::_strm
445445 static_cast <Receiver&&>(rcvr),
446446 ex::get_completion_scheduler<ex::set_value_t >(ex::get_env(pred_sender),
447447 ex::get_env (rcvr))
448- .context_state_ )
448+ .ctx_ )
449449 , scheduler_(ex::get_completion_scheduler<ex::set_value_t >(ex::get_env(pred_sender),
450450 ex::get_env(rcvr)))
451451 , closure_(closure)
@@ -458,7 +458,7 @@ namespace nv::execution::_strm
458458 };
459459
460460 template <class Sender , class Closure >
461- struct sender_t
461+ struct sender
462462 {
463463 using sender_concept = ex::sender_t ;
464464
@@ -467,12 +467,12 @@ namespace nv::execution::_strm
467467 ex::set_error_t(std::exception_ptr),
468468 ex::set_error_t(cudaError_t)>;
469469
470- template <ex::__decays_to<sender_t > Self, ex::receiver Receiver>
470+ template <ex::__decays_to<sender > Self, ex::receiver Receiver>
471471 requires (ex::sender_to<Sender, Receiver>)
472472 STDEXEC_EXPLICIT_THIS_BEGIN(auto connect)(this Self&& self, Receiver r)
473- -> nvexec::_strm::repeat_n ::operation_state_t<Sender, Closure, Receiver>
473+ -> nvexec::_strm::_repeat_n ::operation_state_t<Sender, Closure, Receiver>
474474 {
475- return nvexec::_strm::repeat_n ::operation_state_t <Sender, Closure, Receiver>(
475+ return nvexec::_strm::_repeat_n ::operation_state_t <Sender, Closure, Receiver>(
476476 static_cast <Self&&>(self).sender_ ,
477477 static_cast <Self&&>(self).closure_ ,
478478 static_cast <Receiver&&>(r),
@@ -490,21 +490,20 @@ namespace nv::execution::_strm
490490 Closure closure_;
491491 std::size_t n_{};
492492 };
493- } // namespace repeat_n
493+ } // namespace _repeat_n
494494
495495 template <>
496- struct transform_sender_for <repeat_n_t >
496+ struct transform_sender_for <:: repeat_n_t >
497497 {
498498 template <class Env , class Data , class Sender >
499- auto operator ()(Env const &, ex::__ignore , Data&& data, Sender sndr) const
499+ auto operator ()(Env const &, :: repeat_n_t , Data&& data, Sender sndr) const
500500 {
501- static_assert (sizeof (Env) == 0 );
502- auto & [closure, n] = data;
503- using closure_t = decltype (closure);
501+ auto & [closure, count] = data;
502+ using closure_t = decltype (closure);
504503
505- return repeat_n:: sender_t <Sender, closure_t >(static_cast <Sender&&>(sndr),
506- ex::__forward_like<Data>(closure),
507- n );
504+ return _strm::_repeat_n::sender <Sender, closure_t >(static_cast <Sender&&>(sndr),
505+ ex::__forward_like<Data>(closure),
506+ count );
508507 }
509508 };
510509} // namespace nv::execution::_strm
@@ -528,8 +527,8 @@ auto maxwell_eqs_snr(float dt,
528527 ex::scheduler auto && computer)
529528{
530529 return ex::just ()
531- | repeat_n (n_iterations ,
532- ex::on (computer ,
530+ | ex::on (computer ,
531+ repeat_n (n_iterations ,
533532 ex::bulk (ex::par, accessor.cells , update_h (accessor))
534533 | ex::bulk (ex::par, accessor.cells , update_e (time, dt, accessor))))
535534 | ex::then (dump_vtk (write_results, accessor));
0 commit comments