uvco 0.1
Loading...
Searching...
No Matches
uvco::Generator< T > Class Template Reference

#include <multipromise.h>

Classes

struct  YieldAwaiter_

Public Member Functions

 Generator ()=default
 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_always 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>

Private Attributes

PromiseCore_ 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

Constructor & Destructor Documentation

◆ Generator() [1/3]

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

◆ 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_always uvco::Generator< T >::final_suspend ( )
inlinenoexcept

Part of the coroutine protocol (see Promise).

310{ return {}; }

◆ get_return_object()

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

A generator (yielding) coroutine returns a MultiPromise.

292{ return MultiPromise<T>{core_}; }
Definition multipromise.h:278
PromiseCore_ core_
Definition multipromise.h:358

◆ initial_suspend()

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

Part of the coroutine protocol (see Promise).

304 {
306 return {};
307 }
Generator()=default

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

296 {
297 core_.setTerminated();
298 core_.resume();
299 }

◆ unhandled_exception()

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

Part of the coroutine protocol (see Promise).

313 {
315 core_.setTerminated();
316 core_.resume();
317 }

◆ yield_value()

template<typename T>
YieldAwaiter_ uvco::Generator< T >::yield_value ( T 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.

329 {
330 BOOST_ASSERT(!core_.slot);
331 core_.slot = std::move(value);
332 core_.resume();
333 return YieldAwaiter_{core_};
334 }
Definition multipromise.h:340

Member Data Documentation

◆ core_

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

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