Skip to content

Commit

Permalink
fix stream senders/receivers and sequence senders
Browse files Browse the repository at this point in the history
  • Loading branch information
ericniebler committed Nov 25, 2023
1 parent 4a9647b commit 8d0a8ac
Show file tree
Hide file tree
Showing 10 changed files with 26 additions and 17 deletions.
16 changes: 12 additions & 4 deletions examples/nvexec/maxwell/snr.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,13 @@
#include <nvexec/multi_gpu_context.cuh>
#else
namespace nvexec {
struct stream_receiver_base { };
struct stream_receiver_base {
using receiver_concept = stdexec::receiver_t;
};

struct stream_sender_base { };
struct stream_sender_base {
using sender_concept = stdexec::sender_t;
};

namespace detail {
struct stream_op_state_base { };
Expand Down Expand Up @@ -187,13 +191,15 @@ namespace nvexec::STDEXEC_STREAM_DETAIL_NS { //
namespace repeat_n_detail {

template <class OpT>
class receiver_2_t : public stdexec::__receiver_base {
class receiver_2_t {
using Sender = typename OpT::PredSender;
using Receiver = typename OpT::Receiver;

OpT& op_state_;

public:
using receiver_concept = stdexec::receiver_t;

template <stdexec::__one_of<ex::set_error_t, ex::set_stopped_t> _Tag, class... _Args>
friend void tag_invoke(_Tag __tag, receiver_2_t&& __self, _Args&&... __args) noexcept {
OpT& op_state = __self.op_state_;
Expand Down Expand Up @@ -231,12 +237,14 @@ namespace repeat_n_detail {
};

template <class OpT>
class receiver_1_t : public stdexec::__receiver_base {
class receiver_1_t {
using Receiver = typename OpT::Receiver;

OpT& op_state_;

public:
using receiver_concept = stdexec::receiver_t;

template <stdexec::__one_of<ex::set_error_t, ex::set_stopped_t> _Tag, class... _Args>
friend void tag_invoke(_Tag __tag, receiver_1_t&& __self, _Args&&... __args) noexcept {
OpT& op_state = __self.op_state_;
Expand Down
2 changes: 1 addition & 1 deletion include/exec/__detail/__basic_sequence.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ namespace exec {

template <class _ImplFn>
struct __seqexpr<_ImplFn> {
using is_sender = sequence_tag;
using sender_concept = sequence_sender_t;
using __t = __seqexpr;
using __id = __seqexpr;
using __tag_t = stdexec::__call_result_t<_ImplFn, stdexec::__cp, stdexec::__detail::__get_tag>;
Expand Down
4 changes: 2 additions & 2 deletions include/exec/sequence/any_sequence_of.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ namespace exec {
using __id = __sequence_sender;
using completion_signatures = __compl_sigs;
using item_types = exec::item_types<__item_sender>;
using is_sender = sequence_tag;
using sender_concept = sequence_sender_t;

__t(const __t&) = delete;
__t& operator=(const __t&) = delete;
Expand Down Expand Up @@ -337,7 +337,7 @@ namespace exec {
public:
using __id = any_sender;
using __t = any_sender;
using is_sender = sequence_tag;
using sender_concept = sequence_sender_t;
using completion_signatures = typename __sender_base::completion_signatures;
using item_types = typename __sender_base::item_types;

Expand Down
2 changes: 1 addition & 1 deletion include/exec/sequence/empty_sequence.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ namespace exec {
struct __sender {
struct __t {
using __id = __sender;
using is_sender = sequence_tag;
using sender_concept = sequence_sender_t;
using completion_signatures = stdexec::completion_signatures<stdexec::set_value_t()>;
using item_types = exec::item_types<>;

Expand Down
9 changes: 5 additions & 4 deletions include/exec/sequence_senders.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
#include "../stdexec/execution.hpp"

namespace exec {
struct sequence_tag { };
struct sequence_sender_t : stdexec::sender_t { };
using sequence_tag [[deprecated("Renamed to exec::sequence_sender_t")]] = exec::sequence_sender_t;

namespace __sequence_sndr {
using namespace stdexec;
Expand Down Expand Up @@ -117,9 +118,9 @@ namespace exec {
} // namespace __sequence_sndr

template <class _Sender>
concept __enable_sequence_sender = //
requires { typename _Sender::is_sender; } && //
stdexec::same_as<typename _Sender::is_sender, sequence_tag>;
concept __enable_sequence_sender = //
requires { typename _Sender::sender_concept; } && //
stdexec::same_as<typename _Sender::sender_concept, sequence_tag>;

template <class _Sender>
inline constexpr bool enable_sequence_sender = __enable_sequence_sender<_Sender>;
Expand Down
2 changes: 1 addition & 1 deletion include/exec/static_thread_pool.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1279,7 +1279,7 @@ namespace exec {
public:
using __id = sequence;

using is_sender = sequence_tag;
using sender_concept = sequence_sender_t;

using completion_signatures = stdexec::completion_signatures<
stdexec::set_value_t(),
Expand Down
2 changes: 1 addition & 1 deletion include/nvexec/stream/ensure_started.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ namespace nvexec::STDEXEC_STREAM_DETAIL_NS {

template <class SenderId, class SharedState>
struct receiver_t {
class __t : stream_receiver_base {
class __t : public stream_receiver_base {
using Sender = stdexec::__t<SenderId>;

__intrusive_ptr<SharedState> shared_state_;
Expand Down
2 changes: 1 addition & 1 deletion include/nvexec/stream/then.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ namespace nvexec::STDEXEC_STREAM_DETAIL_NS {
struct receiver_t {
using Receiver = stdexec::__t<ReceiverId>;

class __t : stream_receiver_base {
class __t : public stream_receiver_base {
Fun f_;
operation_state_base_t<ReceiverId>& op_state_;

Expand Down
2 changes: 1 addition & 1 deletion test/exec/sequence/test_ignore_all_values.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ namespace {

template <class Item>
struct sequence {
using is_sender = exec::sequence_tag;
using sender_concept = exec::sequence_sender_t;

using completion_signatures =
stdexec::completion_signatures<stdexec::set_value_t(), stdexec::set_error_t(int)>;
Expand Down
2 changes: 1 addition & 1 deletion test/exec/test_sequence_senders.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ namespace {

template <__completion_signature... _Sigs>
struct some_sequence_sender_of {
using is_sender = sequence_tag;
using sender_concept = sequence_sender_t;
using completion_signatures = stdexec::completion_signatures<set_value_t()>;
using item_types = exec::item_types<some_sender_of<_Sigs...>>;

Expand Down

0 comments on commit 8d0a8ac

Please sign in to comment.