uvco 0.1
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
uvco::Promise< void >::PromiseAwaiter_ Struct Reference

Handles the actual suspension and resumption. More...

Collaboration diagram for uvco::Promise< void >::PromiseAwaiter_:
Collaboration graph
[legend]

Public Member Functions

 PromiseAwaiter_ (PromiseCore< void > &core)
 
 PromiseAwaiter_ (PromiseAwaiter_ &&)=delete
 
 PromiseAwaiter_ (const PromiseAwaiter_ &)=delete
 
PromiseAwaiter_ & operator= (PromiseAwaiter_ &&)=delete
 
PromiseAwaiter_ & operator= (const PromiseAwaiter_ &)=delete
 
bool await_ready () const
 
bool 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.

17 : core_{core} {}
PromiseCore< void > & core_
Definition promise.h:273

◆ PromiseAwaiter_() [2/3]

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

◆ PromiseAwaiter_() [3/3]

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

Member Function Documentation

◆ await_ready()

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

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

32 {
33 return core_.ready_ || core_.exception_;
34}
std::optional< std::exception_ptr > exception_
Contains the exception if thrown.
Definition promise_core.h:229
bool ready_
Definition promise_core.h:226

◆ await_resume()

void uvco::Promise< void >::PromiseAwaiter_::await_resume ( ) const
36 {
37 if (core_.stale()) {
38 throw UvcoException(
39 "co_await called on previously finished promise (void)");
40 }
41 if (core_.exception_) {
42 std::rethrow_exception(core_.exception_.value());
43 }
44 BOOST_ASSERT(core_.ready_);
45}
bool stale() const
See PromiseCore::stale.
Definition promise_core.cc:28

◆ await_suspend()

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

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

24 {
25 BOOST_ASSERT(!core_.ready_ && !core_.exception_);
26 BOOST_ASSERT_MSG(!core_.willResume(),
27 "promise is already being waited on!\n");
28 core_.setHandle(handle);
29 return true;
30}
void setHandle(std::coroutine_handle<> handle)
See PromiseCore::set_resume.
Definition promise_core.cc:17
bool willResume() const
See PromiseCore::willResume.
Definition promise_core.cc:26

◆ 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: