fiber
Loading...
Searching...
No Matches
fiber::CoroutineNode Struct Reference

Represents a coroutine (node) in a reverse-linked list of nested coroutines. More...

#include <Coroutine.hpp>

Inheritance diagram for fiber::CoroutineNode:
fiber::CoroutinePromise< ReturnType > fiber::CoroutinePromise< void > fiber::CoroutinePromise< ReturnType > fiber::CoroutinePromise< void >

Public Member Functions

void destroy () noexcept
 
void resume () noexcept
 
bool is_done () const noexcept
 
constexpr operator bool ()
 
constexpr TaskBasetask ()
 
constexpr const TaskBasetask () const
 
constexpr CoroutineNodeparent ()
 
constexpr const CoroutineNodeparent () const
 
constexpr std::coroutine_handle handle ()
 
constexpr const std::coroutine_handle handle () const
 
constexpr void Register (TaskBase *task)
 
template<class ReturnType>
constexpr void await_suspend (std::coroutine_handle< CoroutinePromise< ReturnType > > handle) noexcept
 
bool await_ready () const noexcept
 
constexpr std::suspend_always final_suspend () noexcept
 
constexpr std::suspend_always initial_suspend () noexcept
 

Public Attributes

std::coroutine_handle _handle = nullptr
 
TaskBase_task = nullptr
 
CoroutineNode_parent = nullptr
 

Detailed Description

Represents a coroutine (node) in a reverse-linked list of nested coroutines.

A coroutine node is the common interface between coroutines of different return types and allows arbitrary nesting of such.

If a new coroutine is being co_awaited, this class makes sure it is being registered at the root TaskBase. Further, it stores a handle to its parent/callers coroutine.

If the coroutine finishes, e.g.: via co_return, then it will un-register itself and re-register the parent/callers coroutine for execution.

Mandatory Overloads

Overload the following methods:

See also
fiber::TaskBase
fiber::Coroutine
fiber::CoroutinePromise

Member Function Documentation

◆ await_ready()

bool fiber::CoroutineNode::await_ready ( ) const
inlinenoexcept

◆ await_suspend()

template<class ReturnType>
void fiber::CoroutineNode::await_suspend ( std::coroutine_handle< CoroutinePromise< ReturnType > > handle)
constexprnoexcept

◆ destroy()

void fiber::CoroutineNode::destroy ( )
inlinenoexcept

◆ final_suspend()

std::suspend_always fiber::CoroutineNode::final_suspend ( )
constexprnoexcept

◆ handle() [1/2]

std::coroutine_handle fiber::CoroutineNode::handle ( )
inlineconstexpr

◆ handle() [2/2]

const std::coroutine_handle fiber::CoroutineNode::handle ( ) const
inlineconstexpr

◆ initial_suspend()

std::suspend_always fiber::CoroutineNode::initial_suspend ( )
inlineconstexprnoexcept

◆ is_done()

bool fiber::CoroutineNode::is_done ( ) const
inlinenoexcept

◆ operator bool()

fiber::CoroutineNode::operator bool ( )
inlineconstexpr

◆ parent() [1/2]

CoroutineNode * fiber::CoroutineNode::parent ( )
inlineconstexpr

◆ parent() [2/2]

const CoroutineNode * fiber::CoroutineNode::parent ( ) const
inlineconstexpr

◆ Register()

void fiber::CoroutineNode::Register ( TaskBase * task)
inlineconstexpr

◆ resume()

void fiber::CoroutineNode::resume ( )
inlinenoexcept

◆ task() [1/2]

TaskBase * fiber::CoroutineNode::task ( )
inlineconstexpr

◆ task() [2/2]

const TaskBase * fiber::CoroutineNode::task ( ) const
inlineconstexpr

Member Data Documentation

◆ _handle

std::coroutine_handle fiber::CoroutineNode::_handle = nullptr

◆ _parent

CoroutineNode* fiber::CoroutineNode::_parent = nullptr

◆ _task

TaskBase* fiber::CoroutineNode::_task = nullptr

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