13#include <boost/assert.hpp>
46 explicit Channel(
unsigned capacity,
unsigned max_waiters = 16)
67 BOOST_VERIFY(
queue_.hasSpace());
69 queue_.put(std::forward<U>(value));
87 BOOST_VERIFY(
co_await awaiter);
106 BOOST_VERIFY(
co_await awaiter);
126 if (handle !=
nullptr) {
136 if (handle !=
nullptr) {
149 waiters_.forEach([
this](std::coroutine_handle<> &h) {
163 "too many coroutines waiting for reading/writing a channel");
Definition bounded_queue.h:24
void awake_writer()
Definition channel.h:133
Promise< void > put(U value)
Definition channel.h:60
Channel(unsigned capacity, unsigned max_waiters=16)
Create a channel for up to capacity items.
Definition channel.h:46
BoundedQueue< std::coroutine_handle<> > write_waiting_
Definition channel.h:120
BoundedQueue< std::coroutine_handle<> > read_waiting_
Definition channel.h:119
void awake_reader()
Definition channel.h:122
MultiPromise< T > getAll()
Definition channel.h:102
BoundedQueue< T > queue_
Definition channel.h:116
Promise< T > get()
Definition channel.h:84
static void enqueue(std::coroutine_handle<> handle)
Definition loop.cc:94
Definition multipromise.h:127
Definition async_work.cc:18
BoundedQueue< T > & queue_
Definition channel.h:173
bool await_resume()
Definition channel.h:170
std::coroutine_handle thisCoro_
Definition channel.h:175
BoundedQueue< std::coroutine_handle<> > & waiters_
Definition channel.h:174
ChannelAwaiter_(BoundedQueue< T > &queue, BoundedQueue< std::coroutine_handle<> > &slot)
Definition channel.h:144
bool await_ready()
Definition channel.h:157
bool await_suspend(std::coroutine_handle<> handle)
Definition channel.h:159
~ChannelAwaiter_()
Definition channel.h:147
Definition exception.h:19