fiber
Loading...
Searching...
No Matches
fiber::Coroutine< ReturnType > Class Template Reference

Owning handle to a coroutine with a custom promise type. More...

#include <Coroutine.hpp>

Public Types

using promise_type = CoroutinePromise<ReturnType>
 
using promise_handle = std::coroutine_handle<promise_type>
 

Public Member Functions

constexpr Coroutine ()=default
 
constexpr Coroutine (promise_handle &&h)
 
constexpr Coroutine (const Coroutine &)=delete
 
constexpr Coroutineoperator= (const Coroutine &)=delete
 
constexpr Coroutine (Coroutine &&other) noexcept
 
constexpr Coroutineoperator= (Coroutine &&other) noexcept
 
constexpr ~Coroutine () noexcept
 
constexpr void resume ()
 
constexpr void destroy ()
 
constexpr void Register (TaskBase *task)
 
constexpr bool is_done () const
 
constexpr operator bool () const noexcept
 
constexpr CoroutinePromise< ReturnType > & promise ()
 
constexpr CoroutineNodenode ()
 
constexpr const CoroutineNodenode () const
 
constexpr bool await_ready () const noexcept
 
template<class T>
constexpr void await_suspend (std::coroutine_handle< CoroutinePromise< T > > handle) noexcept
 
constexpr ReturnType await_resume ()
 
constexpr void await_resume ()
 

Public Attributes

promise_handle coro = nullptr
 

Detailed Description

template<class ReturnType = void>
class fiber::Coroutine< ReturnType >

Owning handle to a coroutine with a custom promise type.

This class represents a coroutine that yields a result of type ReturnType via co_return. It provides mechanisms to manage coroutine execution and lifecycle, including resuming execution, checking completion, and accessing the coroutine's internal promise object. It wraps a coroutine handle (std::coroutine_handle<CoroutinePromise<ReturnType>>) and owns its and the associated promise types (CoroutinePromise<ReturnType>) lifetime.

Awaiting on Coroutine

This type implements the awaiter interface, enabling it to be co_await-ed inside other coroutines (nested coroutines). The methods await_ready, await_suspend, and await_resume define the suspension behavior:

Usage Example

Coroutine<int> MyCoroutine();
Coroutine<int> coro = MyCoroutine();
if (coro) {
coro.resume();
if (coro.is_done()) {
int result = coro.promise().get_value(); // or coro.await_resume()
}
}
promise_handle coro
Definition Coroutine.hpp:139
constexpr Coroutine()=default
Template Parameters
ReturnTypeThe type returned from the coroutine using co_return. If void, the coroutine does not produce a result.
See also
fiber::CoroutinePromise
std::coroutine_handle

Member Typedef Documentation

◆ promise_handle

template<class ReturnType = void>
using fiber::Coroutine< ReturnType >::promise_handle = std::coroutine_handle<promise_type>

◆ promise_type

template<class ReturnType = void>
using fiber::Coroutine< ReturnType >::promise_type = CoroutinePromise<ReturnType>

Constructor & Destructor Documentation

◆ Coroutine() [1/4]

template<class ReturnType = void>
fiber::Coroutine< ReturnType >::Coroutine ( )
constexprdefault

◆ Coroutine() [2/4]

template<class ReturnType = void>
fiber::Coroutine< ReturnType >::Coroutine ( promise_handle && h)
inlineexplicitconstexpr

◆ Coroutine() [3/4]

template<class ReturnType = void>
fiber::Coroutine< ReturnType >::Coroutine ( const Coroutine< ReturnType > & )
constexprdelete

◆ Coroutine() [4/4]

template<class ReturnType = void>
fiber::Coroutine< ReturnType >::Coroutine ( Coroutine< ReturnType > && other)
inlineconstexprnoexcept

◆ ~Coroutine()

template<class T>
fiber::Coroutine< T >::~Coroutine ( )
constexprnoexcept

Member Function Documentation

◆ await_ready()

template<class T>
bool fiber::Coroutine< T >::await_ready ( ) const
constexprnoexcept

◆ await_resume() [1/2]

template<class T>
T fiber::Coroutine< T >::await_resume ( )
constexpr

◆ await_resume() [2/2]

void fiber::Coroutine< void >::await_resume ( )
constexpr

◆ await_suspend()

template<class ReturnValue>
template<class T>
void fiber::Coroutine< ReturnValue >::await_suspend ( std::coroutine_handle< CoroutinePromise< T > > handle)
constexprnoexcept

◆ destroy()

template<class T>
void fiber::Coroutine< T >::destroy ( )
constexpr

◆ is_done()

template<class T>
bool fiber::Coroutine< T >::is_done ( ) const
constexpr

◆ node() [1/2]

template<class T>
CoroutineNode * fiber::Coroutine< T >::node ( )
constexpr

◆ node() [2/2]

template<class T>
const CoroutineNode * fiber::Coroutine< T >::node ( ) const
constexpr

◆ operator bool()

template<class T>
fiber::Coroutine< T >::operator bool ( ) const
explicitconstexprnoexcept

◆ operator=() [1/2]

template<class ReturnType = void>
Coroutine & fiber::Coroutine< ReturnType >::operator= ( const Coroutine< ReturnType > & )
constexprdelete

◆ operator=() [2/2]

template<class ReturnType = void>
Coroutine & fiber::Coroutine< ReturnType >::operator= ( Coroutine< ReturnType > && other)
inlineconstexprnoexcept

◆ promise()

template<class T>
CoroutinePromise< T > & fiber::Coroutine< T >::promise ( )
constexpr

◆ Register()

template<class T>
void fiber::Coroutine< T >::Register ( TaskBase * task)
constexpr

◆ resume()

template<class T>
void fiber::Coroutine< T >::resume ( )
constexpr

Member Data Documentation

◆ coro

template<class ReturnType = void>
promise_handle fiber::Coroutine< ReturnType >::coro = nullptr

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