Skip to content

Commit 0d66c67

Browse files
committed
modified the code to use constexpr get_completion_signatures<S, E...>
1 parent b41caf5 commit 0d66c67

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+590
-244
lines changed

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ SANITIZERS := run
1414
# SANITIZERS += asan # TODO: tsan msan
1515
# endif
1616

17-
.PHONY: default release debug doc run update check ce todo distclean clean codespell clang-tidy build test install all format unstage $(SANITIZERS) module build-module test-module build-interface
17+
.PHONY: default release debug doc run update check ce todo distclean clean codespell clang-tidy build test install all format unstage $(SANITIZERS) module build-module test-module build-interface run-ci
1818

1919
SYSROOT ?=
2020
TOOLCHAIN ?=
@@ -206,6 +206,9 @@ clang-tidy: $(BUILD)/compile_commands.json
206206
codespell:
207207
pre-commit run $@
208208

209+
run-ci:
210+
/Library/Frameworks/Python.framework/Versions/3.14/bin/beman-local-ci -p 2
211+
209212
# ==========================================================
210213
format:
211214
pre-commit autoupdate

examples/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ if(BEMAN_USE_MODULES)
3838
#-dk:TODO gcc doesn't like the modules: list(APPEND EXAMPLES modules modules-and-header)
3939
list(APPEND EXAMPLES modules-and-header)
4040
endif()
41+
#set(EXAMPLES)
4142

4243
foreach(EXAMPLE ${EXAMPLES})
4344
set(EXAMPLE_TARGET ${PROJECT_NAME}.${EXAMPLE})

examples/inspect.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,9 @@ struct logger_t {
145145
state(Sndr&& s, Rcvr&& r, Log&& l)
146146
: inner(ex::connect(std::forward<Sndr>(s), std::forward<Rcvr>(r))), log(std::forward<Log>(l)) {}
147147
auto start() & noexcept -> void {
148-
this->log(meta::type<decltype(ex::get_completion_signatures(std::declval<Sndr>(),
149-
ex::get_env(std::declval<Rcvr>())))>::name());
148+
this->log(meta::type<
149+
decltype(ex::get_completion_signatures<Sndr, decltype(ex::get_env(std::declval<Rcvr>()))>())>::
150+
name());
150151
ex::start(this->inner);
151152
}
152153
};
@@ -158,9 +159,9 @@ struct logger_t {
158159
Sndr sndr;
159160
Log log;
160161

161-
template <typename Env>
162-
auto get_completion_signatures(const Env& env) const noexcept {
163-
return ex::get_completion_signatures(this->sndr, env);
162+
template <typename, typename... Env>
163+
static consteval auto get_completion_signatures() noexcept {
164+
return ex::get_completion_signatures<Sndr, Env...>();
164165
}
165166

166167
template <ex::receiver Receiver>

examples/intro-5-consumer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ struct expected_to_channel_t {
112112
// -> + sends_stopped<CSender...> -> set_stopped_t()
113113
// -> unique
114114
using completion_signatures = ex::completion_signatures<ex::set_value_t(success), ex::set_error_t(failure)>;
115+
template <typename...>
116+
static consteval auto get_completion_signatures() noexcept -> completion_signatures {
117+
return {};
118+
}
115119
CSender child_sender;
116120

117121
template <ex::receiver Receiver>

examples/intro-timer.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ struct intro::timer {
3434
struct sender {
3535
using sender_concept = ex::sender_t;
3636
using completion_signatures = ex::completion_signatures<ex::set_value_t()>;
37+
template <typename...>
38+
static consteval auto get_completion_signatures() noexcept -> completion_signatures {
39+
return {};
40+
}
3741
timer* self;
3842
std::chrono::milliseconds ms;
3943
template <typename R>
@@ -104,6 +108,10 @@ struct intro::timer {
104108
struct run_sender {
105109
using sender_concept = ex::sender_t;
106110
using completion_signatures = ex::completion_signatures<ex::set_value_t()>;
111+
template <typename...>
112+
static consteval auto get_completion_signatures() noexcept -> completion_signatures {
113+
return {};
114+
}
107115

108116
timer* self;
109117

examples/sender-demo.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ template <typename T>
4343
struct just_sender {
4444
using sender_concept = ex::sender_t;
4545
using completion_signatures = ex::completion_signatures<ex::set_value_t(T)>;
46+
template <typename...>
47+
static consteval auto get_completion_signatures() noexcept -> completion_signatures {
48+
return {};
49+
}
4650

4751
T value;
4852
template <ex::receiver Receiver>

examples/stackoverflow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ namespace ex = beman::execution;
1717
struct task {
1818
using sender_concept = ex::sender_t;
1919
using completion_signatures = ex::completion_signatures<ex::set_value_t()>;
20+
template <typename...>
21+
static consteval auto get_completion_signatures() noexcept -> completion_signatures {
22+
return {};
23+
}
2024

2125
struct base {
2226
virtual void complete_value() noexcept = 0;

examples/stopping.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ struct inject_cancel_sender {
5555
auto set_stopped() noexcept -> void { ex::set_stopped(std::move(inner_receiver)); }
5656
};
5757

58-
template <typename E>
59-
auto get_completion_signatures(const E&) {
60-
return ex::get_completion_signatures(this->sender, env{ex::inplace_stop_token{}});
58+
template <typename, typename... E>
59+
static consteval auto get_completion_signatures() {
60+
return ex::get_completion_signatures<Sender, decltype(env{ex::inplace_stop_token{}})>();
6161
}
6262

6363
ex::inplace_stop_token token{};

examples/when_all-cancel.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ static_assert(ex::receiver<receiver>);
4545
struct await_stop {
4646
using sender_concept = ex::sender_t;
4747
using completion_signatures = ex::completion_signatures<ex::set_value_t(), ex::set_stopped_t()>;
48+
template <typename...>
49+
static consteval auto get_completion_signatures() noexcept -> completion_signatures {
50+
return {};
51+
}
4852

4953
template <ex::receiver Receiver>
5054
struct state {
@@ -82,6 +86,10 @@ template <ex::sender Sender>
8286
struct eager {
8387
using sender_concept = ex::sender_t;
8488
using completion_signatures = ex::completion_signatures<ex::set_value_t(), ex::set_stopped_t()>;
89+
template <typename...>
90+
static consteval auto get_completion_signatures() noexcept -> completion_signatures {
91+
return {};
92+
}
8593

8694
Sender sender;
8795

include/beman/execution/detail/affine_on.hpp

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import std;
1414
#include <utility>
1515
#endif
1616
#ifdef BEMAN_HAS_MODULES
17+
import beman.execution.detail.basic_sender;
1718
import beman.execution.detail.completion_signatures;
19+
import beman.execution.detail.completion_signatures_of_t;
1820
import beman.execution.detail.env;
1921
import beman.execution.detail.forward_like;
2022
import beman.execution.detail.fwd_env;
@@ -130,16 +132,18 @@ struct affine_on_t : ::beman::execution::sender_adaptor_closure<affine_on_t> {
130132
requires ::beman::execution::detail::sender_for<Sender, affine_on_t> && requires(const Env& env) {
131133
{ ::beman::execution::get_scheduler(env) } -> ::beman::execution::scheduler;
132134
{ ::beman::execution::schedule(::beman::execution::get_scheduler(env)) } -> ::beman::execution::sender;
135+
}
136+
static auto transform_sender(Sender&& sender, const Env& ev) {
137+
static_assert(requires {
133138
{
134-
::beman::execution::get_completion_signatures(
135-
::beman::execution::schedule(::beman::execution::get_scheduler(env)),
136-
::beman::execution::detail::join_env(
139+
::beman::execution::get_completion_signatures<
140+
decltype(::beman::execution::schedule(::beman::execution::get_scheduler(ev))),
141+
decltype(::beman::execution::detail::join_env(
137142
::beman::execution::env{::beman::execution::prop{
138143
::beman::execution::get_stop_token, ::beman::execution::never_stop_token{}, {}}},
139-
env))
144+
ev))>()
140145
} -> ::std::same_as<::beman::execution::completion_signatures<::beman::execution::set_value_t()>>;
141-
}
142-
static auto transform_sender(Sender&& sender, const Env& ev) {
146+
});
143147
//[[maybe_unused]] auto& [tag, data, child] = sender;
144148
auto& child = sender.template get<2>();
145149
using child_tag_t = ::beman::execution::tag_of_t<::std::remove_cvref_t<decltype(child)>>;
@@ -155,6 +159,20 @@ struct affine_on_t : ::beman::execution::sender_adaptor_closure<affine_on_t> {
155159
beman::execution::detail::affine_on_env(ev));
156160
}
157161
}
162+
template <typename, typename...>
163+
struct get_signatures;
164+
165+
template <typename Data, typename Child, typename... Env>
166+
struct get_signatures<
167+
::beman::execution::detail::basic_sender<::beman::execution::detail::affine_on_t, Data, Child>,
168+
Env...> {
169+
using type = ::beman::execution::completion_signatures_of_t<Child, Env...>;
170+
};
171+
172+
template <typename Sender, typename... Env>
173+
static consteval auto get_completion_signatures() {
174+
return typename get_signatures<::std::remove_cvref_t<Sender>, Env...>::type{};
175+
}
158176
};
159177

160178
} // namespace beman::execution::detail

0 commit comments

Comments
 (0)