uvco 0.1
Loading...
Searching...
No Matches
Classes | Public Member Functions | Private Types | Private Attributes | List of all members
uvco::Generator< T > Class Template Reference

#include <multipromise.h>

Classes

struct  YieldAwaiter_
 

Public Member Functions

 Generator ()
 
 Generator (Generator< T > &&) noexcept=delete
 
Generatoroperator= (const Generator< T > &)=delete
 
Generatoroperator= (Generator< T > &&) noexcept=delete
 
 Generator (const Generator< T > &other)=delete
 
 ~Generator ()=default
 
MultiPromise< T > get_return_object ()
 A generator (yielding) coroutine returns a MultiPromise.
 
void return_void ()
 
std::suspend_never initial_suspend () noexcept
 Part of the coroutine protocol (see Promise).
 
std::suspend_never final_suspend () noexcept
 Part of the coroutine protocol (see Promise).
 
void unhandled_exception ()
 Part of the coroutine protocol (see Promise).
 
YieldAwaiter_ yield_value (T value)
 

Private Types

using PromiseCore_ = MultiPromiseCore<T>
 
using SharedCore_ = std::shared_ptr<PromiseCore_>
 

Private Attributes

SharedCore_ core_
 

Detailed Description

template<typename T>
class uvco::Generator< T >

Generator is the promise object type for generator-type coroutines (those returning a MultiPromise).

Member Typedef Documentation

◆ PromiseCore_

template<typename T >
using uvco::Generator< T >::PromiseCore_ = MultiPromiseCore<T>
private

◆ SharedCore_

template<typename T >
using uvco::Generator< T >::SharedCore_ = std::shared_ptr<PromiseCore_>
private

Constructor & Destructor Documentation

◆ Generator() [1/3]

template<typename T >
uvco::Generator< T >::Generator ( )
inline
271: core_{std::make_shared<PromiseCore_>()} {}
SharedCore_ core_
Definition multipromise.h:340

◆ Generator() [2/3]

template<typename T >
uvco::Generator< T >::Generator ( Generator< T > &&  )
deletenoexcept

◆ Generator() [3/3]

template<typename T >
uvco::Generator< T >::Generator ( const Generator< T > &  other)
delete

◆ ~Generator()

template<typename T >
uvco::Generator< T >::~Generator ( )
default

Member Function Documentation

◆ final_suspend()

template<typename T >
std::suspend_never uvco::Generator< T >::final_suspend ( )
inlinenoexcept

Part of the coroutine protocol (see Promise).

293{ return {}; }

◆ get_return_object()

template<typename T >
MultiPromise< T > uvco::Generator< T >::get_return_object ( )
inline

A generator (yielding) coroutine returns a MultiPromise.

279{ return MultiPromise<T>{core_}; }

◆ initial_suspend()

template<typename T >
std::suspend_never uvco::Generator< T >::initial_suspend ( )
inlinenoexcept

Part of the coroutine protocol (see Promise).

291{ return {}; }

◆ operator=() [1/2]

template<typename T >
Generator & uvco::Generator< T >::operator= ( const Generator< T > &  )
delete

◆ operator=() [2/2]

template<typename T >
Generator & uvco::Generator< T >::operator= ( Generator< T > &&  )
deletenoexcept

◆ return_void()

template<typename T >
void uvco::Generator< T >::return_void ( )
inline

A MultiPromise coroutine ultimately returns void. This is signaled to the caller by returning an empty std::optional.

283 {
284 core_->terminated();
285 core_->resume();
286 }

◆ unhandled_exception()

template<typename T >
void uvco::Generator< T >::unhandled_exception ( )
inline

Part of the coroutine protocol (see Promise).

296 {
297 core_->slot = std::current_exception();
298 core_->terminated();
299 core_->resume();
300 }

◆ yield_value()

template<typename T >
YieldAwaiter_ uvco::Generator< T >::yield_value ( value)
inline

Yield a value to the calling (awaiting) coroutine.

Equivalent to co_yield = co_await promise.yield_value() (defined in C++ standard); suspends the generator coroutine and resumes the awaiting coroutine if there is one.

If nobody is awaiting a value from this generator, the yielded value is still moved into the generator's slot, but the generator is not resumed. Upon the next co_await, the returned MultiPromiseAwaiter_ will immediately return the value without resuming the generator.

312 {
313 BOOST_ASSERT(!core_->slot);
314 core_->slot = std::move(value);
315 core_->resume();
316 return YieldAwaiter_{*core_};
317 }

Member Data Documentation

◆ core_

template<typename T >
SharedCore_ uvco::Generator< T >::core_
private

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