58 using Variant = std::variant<Promise<Ts> *...>;
59 using Tuple = std::tuple<Promise<Ts> *...>;
66 [](
auto *...promise) { (promise->core()->resetHandle(), ...); },
72 BOOST_ASSERT_MSG(!
resumed_,
"A select set can only be used once");
73 const bool isReady = std::apply(
74 [](
auto *...promise) ->
bool {
return (promise->ready() || ...); },
84 [handle](
auto *...promise) {
85 ((!promise->core()->stale() ? promise->core()->setHandle(handle)
103 std::vector<Variant> readyPromises;
111 return readyPromises;
115 template <
size_t Ix = 0>
117 if constexpr (Ix <
sizeof...(Ts)) {
118 using PromisePtr = std::tuple_element_t<Ix, Tuple>;
119 PromisePtr promise = std::get<Ix>(
promises_);
120 if (promise->ready()) {
121 readyPromises.emplace_back(std::in_place_index<Ix>, promise);
125 promise->core()->resetHandle();
static void cancel(std::coroutine_handle<> handle)
Definition loop.cc:104
static std::coroutine_handle getNext()
Definition loop.cc:108
std::vector< Variant > await_resume()
Definition select.h:101
std::coroutine_handle await_suspend(std::coroutine_handle<> handle)
Definition select.h:82
std::tuple< Promise< Ts > *... > Tuple
Definition select.h:59
SelectSet(Promise< Ts > &...promises)
Definition select.h:61
~SelectSet()
Definition select.h:63
std::coroutine_handle suspended_
Definition select.h:132
Tuple promises_
Definition select.h:131
void checkPromises(std::vector< Variant > &readyPromises)
Definition select.h:116
bool await_ready() noexcept
Definition select.h:71
bool resumed_
Definition select.h:133
std::variant< Promise< Ts > *... > Variant
Definition select.h:58
Definition async_work.cc:18