uvco 0.1
Loading...
Searching...
No Matches
uvco::Channel< T >::ChannelAwaiter_ Struct Reference
Collaboration diagram for uvco::Channel< T >::ChannelAwaiter_:

Public Member Functions

 ChannelAwaiter_ (BoundedQueue< T > &queue, BoundedQueue< std::coroutine_handle<> > &slot)
 ~ChannelAwaiter_ ()
bool await_ready ()
bool await_suspend (std::coroutine_handle<> handle)
bool await_resume ()

Public Attributes

BoundedQueue< T > & queue_
BoundedQueue< std::coroutine_handle<> > & waiters_
std::coroutine_handle thisCoro_

Constructor & Destructor Documentation

◆ ChannelAwaiter_()

template<typename T>
uvco::Channel< T >::ChannelAwaiter_::ChannelAwaiter_ ( BoundedQueue< T > & queue,
BoundedQueue< std::coroutine_handle<> > & slot )
inlineexplicit
146 : queue_{queue}, waiters_{slot} {}
Definition channel.h:43
BoundedQueue< T > & queue_
Definition channel.h:173
BoundedQueue< std::coroutine_handle<> > & waiters_
Definition channel.h:174

◆ ~ChannelAwaiter_()

template<typename T>
uvco::Channel< T >::ChannelAwaiter_::~ChannelAwaiter_ ( )
inline
147 {
148 // Remove us from waiters.
149 waiters_.forEach([this](std::coroutine_handle<> &h) {
150 // Remove pending coroutine from waiter queue.
151 if (h == thisCoro_) {
152 h = nullptr;
153 }
154 });
155 }
std::coroutine_handle thisCoro_
Definition channel.h:175

Member Function Documentation

◆ await_ready()

template<typename T>
bool uvco::Channel< T >::ChannelAwaiter_::await_ready ( )
inline
157{ return false; }

◆ await_resume()

template<typename T>
bool uvco::Channel< T >::ChannelAwaiter_::await_resume ( )
inline
170{ return !queue_.empty(); }

◆ await_suspend()

template<typename T>
bool uvco::Channel< T >::ChannelAwaiter_::await_suspend ( std::coroutine_handle<> handle)
inline
159 {
160 if (!waiters_.hasSpace()) {
161 throw UvcoException(
162 UV_EBUSY,
163 "too many coroutines waiting for reading/writing a channel");
164 }
166 waiters_.put(handle);
167 return true;
168 }

Member Data Documentation

◆ queue_

template<typename T>
BoundedQueue<T>& uvco::Channel< T >::ChannelAwaiter_::queue_

◆ thisCoro_

template<typename T>
std::coroutine_handle uvco::Channel< T >::ChannelAwaiter_::thisCoro_

◆ waiters_

template<typename T>
BoundedQueue<std::coroutine_handle<> >& uvco::Channel< T >::ChannelAwaiter_::waiters_

The documentation for this struct was generated from the following file: