uvco 0.1
Loading...
Searching...
No Matches
uvco::Promise< void >::PromiseAwaiter_ Struct Reference

Handles the actual suspension and resumption. More...

Collaboration diagram for uvco::Promise< void >::PromiseAwaiter_:

Public Member Functions

 PromiseAwaiter_ (PromiseCore< void > &core)
 PromiseAwaiter_ (PromiseAwaiter_ &&)=delete
 PromiseAwaiter_ (const PromiseAwaiter_ &)=delete
PromiseAwaiter_operator= (PromiseAwaiter_ &&)=delete
PromiseAwaiter_operator= (const PromiseAwaiter_ &)=delete
 ~PromiseAwaiter_ ()=default
bool await_ready () const
std::coroutine_handle await_suspend (std::coroutine_handle<> handle) const
void await_resume () const

Public Attributes

PromiseCore< void > & core_

Detailed Description

Handles the actual suspension and resumption.

Constructor & Destructor Documentation

◆ PromiseAwaiter_() [1/3]

uvco::Promise< void >::PromiseAwaiter_::PromiseAwaiter_ ( PromiseCore< void > & core)
explicit

The core is shared among all copies of this Promise and holds the resumption handle to a waiting coroutine, as well as the ready state.

15 : core_{core} {}
Definition promise.h:49
PromiseCore< void > & core_
Definition promise.h:243

◆ PromiseAwaiter_() [2/3]

uvco::Promise< void >::PromiseAwaiter_::PromiseAwaiter_ ( PromiseAwaiter_ && )
delete

◆ PromiseAwaiter_() [3/3]

uvco::Promise< void >::PromiseAwaiter_::PromiseAwaiter_ ( const PromiseAwaiter_ & )
delete

◆ ~PromiseAwaiter_()

uvco::Promise< void >::PromiseAwaiter_::~PromiseAwaiter_ ( )
default

Member Function Documentation

◆ await_ready()

bool uvco::Promise< void >::PromiseAwaiter_::await_ready ( ) const
nodiscard

Part of the coroutine protocol: returns if the promise is already fulfilled.

21 {
22 return core_.ready_ || core_.exception_;
23}

◆ await_resume()

void uvco::Promise< void >::PromiseAwaiter_::await_resume ( ) const
33 {
34 if (core_.stale()) {
35 throw UvcoException(
36 "co_await called on previously finished promise (void)");
37 }
38 if (core_.exception_) {
39 std::rethrow_exception(core_.exception_.value());
40 }
41 BOOST_ASSERT(core_.ready_);
42 core_.ready_ = false;
43}

◆ await_suspend()

std::coroutine_handle uvco::Promise< void >::PromiseAwaiter_::await_suspend ( std::coroutine_handle<> handle) const
nodiscard

Part of the coroutine protocol: returns if suspension is desired (always true), and stores the awaiting coroutine state in the PromiseCore.

26 {
27 BOOST_ASSERT(!core_.ready_ && !core_.exception_);
28 BOOST_ASSERT_MSG(!core_.isAwaited(), "promise is already being waited on!\n");
29 core_.setHandle(handle);
30 return Loop::getNext();
31}
static std::coroutine_handle getNext()
Definition loop.cc:108

◆ operator=() [1/2]

PromiseAwaiter_ & uvco::Promise< void >::PromiseAwaiter_::operator= ( const PromiseAwaiter_ & )
delete

◆ operator=() [2/2]

PromiseAwaiter_ & uvco::Promise< void >::PromiseAwaiter_::operator= ( PromiseAwaiter_ && )
delete

Member Data Documentation

◆ core_

PromiseCore<void>& uvco::Promise< void >::PromiseAwaiter_::core_

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