From d3f0c1121c452af2369a2007b238c44499e62b34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dietmar=20K=C3=BChl?= Date: Sun, 19 Jul 2026 17:00:39 +0100 Subject: [PATCH 1/3] changed various places to use get_start_scheduler --- include/beman/task/detail/awaiter.hpp | 14 +++++++------- include/beman/task/detail/promise_env.hpp | 4 ++-- include/beman/task/detail/promise_type.hpp | 4 ++-- include/beman/task/detail/state.hpp | 4 ++-- include/beman/task/detail/state_base.hpp | 12 +++++++----- tests/beman/task/promise_base.test.cpp | 4 ++-- tests/beman/task/promise_type.test.cpp | 6 +++--- tests/beman/task/state_base.test.cpp | 4 ++-- tests/beman/task/task.test.cpp | 2 +- 9 files changed, 28 insertions(+), 26 deletions(-) diff --git a/include/beman/task/detail/awaiter.hpp b/include/beman/task/detail/awaiter.hpp index d69efae..7583b10 100644 --- a/include/beman/task/detail/awaiter.hpp +++ b/include/beman/task/detail/awaiter.hpp @@ -25,16 +25,16 @@ struct awaiter_scheduler_receiver { template + requires(const ParentPromise& p) { ::beman::execution::get_start_scheduler(::beman::execution::get_env(p)); }> struct awaiter_op_t { using state_type = - decltype(::beman::execution::connect(::beman::execution::schedule(::beman::execution::get_scheduler( + decltype(::beman::execution::connect(::beman::execution::schedule(::beman::execution::get_start_scheduler( ::beman::execution::get_env(::std::declval()))), ::std::declval>())); awaiter_op_t(const ParentPromise& p, Awaiter* aw) : state(::beman::execution::connect( - ::beman::execution::schedule(beman::execution::get_scheduler(::beman::execution::get_env(p))), + ::beman::execution::schedule(beman::execution::get_start_scheduler(::beman::execution::get_env(p))), awaiter_scheduler_receiver{aw})) {} state_type state; auto start() noexcept -> void { ::beman::execution::start(this->state); } @@ -74,10 +74,10 @@ class awaiter : public ::beman::task::detail::state_base { assert(this->scheduler); if constexpr (requires { *this->scheduler != - ::beman::execution::get_scheduler(::beman::execution::get_env(this->parent.promise())); + ::beman::execution::get_start_scheduler(::beman::execution::get_env(this->parent.promise())); }) { if (*this->scheduler != - ::beman::execution::get_scheduler(::beman::execution::get_env(this->parent.promise()))) { + ::beman::execution::get_start_scheduler(::beman::execution::get_env(this->parent.promise()))) { this->reschedule.emplace(this->parent.promise(), this); this->reschedule->start(); return ::std::noop_coroutine(); @@ -96,8 +96,8 @@ class awaiter : public ::beman::task::detail::state_base { else return allocator_type{}; } - auto do_get_scheduler() -> scheduler_type override { return *this->scheduler; } - auto do_set_scheduler(scheduler_type other) -> scheduler_type override { + auto do_get_start_scheduler() -> scheduler_type override { return *this->scheduler; } + auto do_set_start_scheduler(scheduler_type other) -> scheduler_type override { return ::std::exchange(*this->scheduler, other); } auto do_get_stop_token() -> stop_token_type override { return {}; } diff --git a/include/beman/task/detail/promise_env.hpp b/include/beman/task/detail/promise_env.hpp index 0549a1e..ff61df1 100644 --- a/include/beman/task/detail/promise_env.hpp +++ b/include/beman/task/detail/promise_env.hpp @@ -15,10 +15,10 @@ struct promise_env { const Promise* promise; auto query(const ::beman::execution::get_scheduler_t&) const noexcept -> typename Promise::scheduler_type { - return this->promise->get_scheduler(); + return this->promise->get_start_scheduler(); } auto query(const ::beman::execution::get_start_scheduler_t&) const noexcept -> typename Promise::scheduler_type { - return this->promise->get_scheduler(); + return this->promise->get_start_scheduler(); } auto query(const ::beman::execution::get_allocator_t&) const noexcept -> typename Promise::allocator_type { return this->promise->get_allocator(); diff --git a/include/beman/task/detail/promise_type.hpp b/include/beman/task/detail/promise_type.hpp index 842a95a..707afdd 100644 --- a/include/beman/task/detail/promise_type.hpp +++ b/include/beman/task/detail/promise_type.hpp @@ -97,10 +97,10 @@ class promise_type } auto notify_complete() -> ::std::coroutine_handle<> { return this->get_state()->complete(); } scheduler_type change_scheduler(scheduler_type other) { - return this->get_state()->set_scheduler(::std::move(other)); + return this->get_state()->set_start_scheduler(::std::move(other)); } - auto get_scheduler() const noexcept -> scheduler_type { return this->get_state()->get_scheduler(); } + auto get_start_scheduler() const noexcept -> scheduler_type { return this->get_state()->get_start_scheduler(); } auto get_allocator() const noexcept -> allocator_type { return this->get_state()->get_allocator(); } auto get_stop_token() const noexcept -> stop_token_type { return this->get_state()->get_stop_token(); } auto get_environment() const noexcept -> const Environment& { diff --git a/include/beman/task/detail/state.hpp b/include/beman/task/detail/state.hpp index 8146ae1..bdb1e81 100644 --- a/include/beman/task/detail/state.hpp +++ b/include/beman/task/detail/state.hpp @@ -56,8 +56,8 @@ struct state : ::beman::task::detail::state_base, ::beman::task::detail::s else return allocator_type{}; } - auto do_get_scheduler() -> scheduler_type override { return this->scheduler; } - auto do_set_scheduler(scheduler_type other) -> scheduler_type override { + auto do_get_start_scheduler() -> scheduler_type override { return this->scheduler; } + auto do_set_start_scheduler(scheduler_type other) -> scheduler_type override { return ::std::exchange(this->scheduler, other); } stop_token_type do_get_stop_token() override { diff --git a/include/beman/task/detail/state_base.hpp b/include/beman/task/detail/state_base.hpp index 6a43b42..6bc3efc 100644 --- a/include/beman/task/detail/state_base.hpp +++ b/include/beman/task/detail/state_base.hpp @@ -31,13 +31,15 @@ class state_base : public ::beman::task::detail::result_type<::beman::task::deta assert(this); return this->do_get_environment(); } - auto get_scheduler() -> scheduler_type { return this->do_get_scheduler(); } - auto set_scheduler(scheduler_type other) -> scheduler_type { return this->do_set_scheduler(other); } + auto get_start_scheduler() -> scheduler_type { return this->do_get_start_scheduler(); } + auto set_start_scheduler(scheduler_type other) -> scheduler_type { return this->do_set_start_scheduler(other); } protected: template <::beman::execution::scheduler Scheduler, typename Env> static auto from_env(const Env& env) { - if constexpr (requires { Scheduler(::beman::execution::get_scheduler(env)); }) { + if constexpr (requires { Scheduler(::beman::execution::get_start_scheduler(env)); }) { + return Scheduler(::beman::execution::get_start_scheduler(env)); + } else if constexpr (requires { Scheduler(::beman::execution::get_scheduler(env)); }) { return Scheduler(::beman::execution::get_scheduler(env)); } else { return Scheduler(); @@ -49,8 +51,8 @@ class state_base : public ::beman::task::detail::result_type<::beman::task::deta virtual auto do_get_allocator() -> allocator_type = 0; virtual auto do_get_stop_token() -> stop_token_type = 0; virtual auto do_get_environment() -> Environment& = 0; - virtual auto do_get_scheduler() -> scheduler_type = 0; - virtual auto do_set_scheduler(scheduler_type other) -> scheduler_type = 0; + virtual auto do_get_start_scheduler() -> scheduler_type = 0; + virtual auto do_set_start_scheduler(scheduler_type other) -> scheduler_type = 0; // NOLINTEND(portability-template-virtual-member-function) virtual ~state_base() = default; diff --git a/tests/beman/task/promise_base.test.cpp b/tests/beman/task/promise_base.test.cpp index 8a3073d..166255d 100644 --- a/tests/beman/task/promise_base.test.cpp +++ b/tests/beman/task/promise_base.test.cpp @@ -72,8 +72,8 @@ struct state : bt::state_base> { this->got_environment = true; return this->ev; } - auto do_get_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } - auto do_set_scheduler(scheduler_type) -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_get_start_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_set_start_scheduler(scheduler_type) -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } }; template diff --git a/tests/beman/task/promise_type.test.cpp b/tests/beman/task/promise_type.test.cpp index 8a60cb9..4fe5448 100644 --- a/tests/beman/task/promise_type.test.cpp +++ b/tests/beman/task/promise_type.test.cpp @@ -157,11 +157,11 @@ struct test_task : beman::task::detail::state_base { allocator_type do_get_allocator() override { return allocator_type{}; } stop_token_type do_get_stop_token() override { return this->source.get_token(); } environment& do_get_environment() override { return this->env; } - auto do_get_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } - auto do_set_scheduler(scheduler_type) -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_get_start_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_set_start_scheduler(scheduler_type) -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } beman::task::detail::task_scheduler scheduler{beman::execution::inline_scheduler{}}; - beman::task::detail::task_scheduler query(beman::execution::get_scheduler_t) const noexcept { + beman::task::detail::task_scheduler query(beman::execution::get_start_scheduler_t) const noexcept { return this->scheduler; } }; diff --git a/tests/beman/task/state_base.test.cpp b/tests/beman/task/state_base.test.cpp index 8ad026c..8fe8f04 100644 --- a/tests/beman/task/state_base.test.cpp +++ b/tests/beman/task/state_base.test.cpp @@ -38,8 +38,8 @@ struct state : beman::task::detail::state_base { this->got_environment = true; return this->env; } - auto do_get_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } - auto do_set_scheduler(scheduler_type) -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_get_start_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_set_start_scheduler(scheduler_type) -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } }; } // namespace diff --git a/tests/beman/task/task.test.cpp b/tests/beman/task/task.test.cpp index d474f43..865242c 100644 --- a/tests/beman/task/task.test.cpp +++ b/tests/beman/task/task.test.cpp @@ -42,7 +42,7 @@ auto test_affinity() { co_await []() -> ex::task<> { ex::inline_scheduler sched{}; std::cout << "comparing schedulers=" << std::boolalpha - << (sched == co_await ex::read_env(ex::get_scheduler)) << "\n"; + << (sched == co_await ex::read_env(ex::get_start_scheduler)) << "\n"; std::cout << "changing scheduler\n"; co_await ex::change_coroutine_scheduler(sched); std::cout << "changed scheduler\n"; From facaf6b2aa84e95d5086653cb5c6647ef852a748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dietmar=20K=C3=BChl?= Date: Sun, 19 Jul 2026 17:02:59 +0100 Subject: [PATCH 2/3] clang-format --- include/beman/task/detail/awaiter.hpp | 8 ++++---- tests/beman/task/promise_base.test.cpp | 4 +++- tests/beman/task/promise_type.test.cpp | 6 ++++-- tests/beman/task/state_base.test.cpp | 4 +++- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/include/beman/task/detail/awaiter.hpp b/include/beman/task/detail/awaiter.hpp index 7583b10..dffcafd 100644 --- a/include/beman/task/detail/awaiter.hpp +++ b/include/beman/task/detail/awaiter.hpp @@ -24,8 +24,8 @@ struct awaiter_scheduler_receiver { template + bool = requires( + const ParentPromise& p) { ::beman::execution::get_start_scheduler(::beman::execution::get_env(p)); }> struct awaiter_op_t { using state_type = decltype(::beman::execution::connect(::beman::execution::schedule(::beman::execution::get_start_scheduler( @@ -73,8 +73,8 @@ class awaiter : public ::beman::task::detail::state_base { assert(this->parent); assert(this->scheduler); if constexpr (requires { - *this->scheduler != - ::beman::execution::get_start_scheduler(::beman::execution::get_env(this->parent.promise())); + *this->scheduler != ::beman::execution::get_start_scheduler( + ::beman::execution::get_env(this->parent.promise())); }) { if (*this->scheduler != ::beman::execution::get_start_scheduler(::beman::execution::get_env(this->parent.promise()))) { diff --git a/tests/beman/task/promise_base.test.cpp b/tests/beman/task/promise_base.test.cpp index 166255d..6bbca98 100644 --- a/tests/beman/task/promise_base.test.cpp +++ b/tests/beman/task/promise_base.test.cpp @@ -73,7 +73,9 @@ struct state : bt::state_base> { return this->ev; } auto do_get_start_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } - auto do_set_start_scheduler(scheduler_type) -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_set_start_scheduler(scheduler_type) -> scheduler_type override { + return scheduler_type(ex::inline_scheduler()); + } }; template diff --git a/tests/beman/task/promise_type.test.cpp b/tests/beman/task/promise_type.test.cpp index 4fe5448..e3d0561 100644 --- a/tests/beman/task/promise_type.test.cpp +++ b/tests/beman/task/promise_type.test.cpp @@ -157,8 +157,10 @@ struct test_task : beman::task::detail::state_base { allocator_type do_get_allocator() override { return allocator_type{}; } stop_token_type do_get_stop_token() override { return this->source.get_token(); } environment& do_get_environment() override { return this->env; } - auto do_get_start_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } - auto do_set_start_scheduler(scheduler_type) -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_get_start_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_set_start_scheduler(scheduler_type) -> scheduler_type override { + return scheduler_type(ex::inline_scheduler()); + } beman::task::detail::task_scheduler scheduler{beman::execution::inline_scheduler{}}; beman::task::detail::task_scheduler query(beman::execution::get_start_scheduler_t) const noexcept { diff --git a/tests/beman/task/state_base.test.cpp b/tests/beman/task/state_base.test.cpp index 8fe8f04..5e9ed93 100644 --- a/tests/beman/task/state_base.test.cpp +++ b/tests/beman/task/state_base.test.cpp @@ -39,7 +39,9 @@ struct state : beman::task::detail::state_base { return this->env; } auto do_get_start_scheduler() -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } - auto do_set_start_scheduler(scheduler_type) -> scheduler_type override { return scheduler_type(ex::inline_scheduler()); } + auto do_set_start_scheduler(scheduler_type) -> scheduler_type override { + return scheduler_type(ex::inline_scheduler()); + } }; } // namespace From 0bb9de8f461035270b689d38eb67cdbcacf44089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dietmar=20K=C3=BChl?= Date: Sun, 19 Jul 2026 17:05:05 +0100 Subject: [PATCH 3/3] clang-format again --- include/beman/task/detail/state_base.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/beman/task/detail/state_base.hpp b/include/beman/task/detail/state_base.hpp index 6bc3efc..2db3c8f 100644 --- a/include/beman/task/detail/state_base.hpp +++ b/include/beman/task/detail/state_base.hpp @@ -47,10 +47,10 @@ class state_base : public ::beman::task::detail::result_type<::beman::task::deta } // NOLINTBEGIN(portability-template-virtual-member-function) - virtual auto do_complete() -> std::coroutine_handle<> = 0; - virtual auto do_get_allocator() -> allocator_type = 0; - virtual auto do_get_stop_token() -> stop_token_type = 0; - virtual auto do_get_environment() -> Environment& = 0; + virtual auto do_complete() -> std::coroutine_handle<> = 0; + virtual auto do_get_allocator() -> allocator_type = 0; + virtual auto do_get_stop_token() -> stop_token_type = 0; + virtual auto do_get_environment() -> Environment& = 0; virtual auto do_get_start_scheduler() -> scheduler_type = 0; virtual auto do_set_start_scheduler(scheduler_type other) -> scheduler_type = 0; // NOLINTEND(portability-template-virtual-member-function)