tin  1.5.9
tsm::task_context Class Reference

#include <coroutine.h>

Collaboration diagram for tsm::task_context:
Collaboration graph

Public Types

using predicate_fn = bool(*)(void const *) noexcept
 
using wake_fn = void(*)(void *, std::size_t) noexcept
 
using sleep_fn = bool(*)(void *, std::size_t, tsm::tick_rep) noexcept
 
using cancel_sleep_fn = void(*)(void *, std::size_t) noexcept
 

Public Member Functions

 task_context ()=default
 
 task_context (static_coroutine_arena< 1U > *, std::size_t, std::size_t, std::size_t)=delete
 
template<std::size_t Bytes>
void bind (static_coroutine_arena< Bytes > &arena, std::size_t task_id, std::size_t instance_id, std::size_t frame_limit, void *scheduler, wake_fn wake, sleep_fn sleep, cancel_sleep_fn cancel_sleep) noexcept
 
void * allocate_frame (std::size_t bytes, std::size_t alignment) noexcept
 
std::size_t task_id () const noexcept
 
std::size_t instance_id () const noexcept
 
tsm::tick_rep now () const noexcept
 
task_wait_kind wait_kind () const noexcept
 
task_status status () const noexcept
 
task_failure_reason failure_reason () const noexcept
 
std::uint32_t generation () const noexcept
 
void set_now (tsm::tick_rep now) noexcept
 
void mark_ready () noexcept
 
void prepare_start () noexcept
 
void mark_running () noexcept
 
void sleep_for (tsm::tick_rep ticks) noexcept
 
void cancel_sleep () noexcept
 
template<typename Object , typename Predicate >
void wait_until (Object const &object, Predicate predicate) noexcept
 
bool ready_to_resume () const noexcept
 
bool predicate_ready () const noexcept
 
void mark_completed () noexcept
 
void mark_failed (task_failure_reason reason=task_failure_reason::unhandled_exception) noexcept
 
void cancel () noexcept
 
void request_wake () noexcept
 
void clear_queued () noexcept
 

Detailed Description

Runtime state visible to awaitables created inside a task.

Awaitables do not talk to an executor directly. They mark this context as ready, sleeping, failed, or waiting on a predicate; the scheduler then uses the context to decide which coroutine can run next. This keeps awaitable types small and lets the executor enforce fixed queue and timer capacities.

Member Typedef Documentation

◆ cancel_sleep_fn

using tsm::task_context::cancel_sleep_fn = void (*)(void*, std::size_t) noexcept

◆ predicate_fn

using tsm::task_context::predicate_fn = bool (*)(void const*) noexcept

◆ sleep_fn

using tsm::task_context::sleep_fn = bool (*)(void*, std::size_t, tsm::tick_rep) noexcept

◆ wake_fn

using tsm::task_context::wake_fn = void (*)(void*, std::size_t) noexcept

Constructor & Destructor Documentation

◆ task_context() [1/2]

tsm::task_context::task_context ( )
default

◆ task_context() [2/2]

tsm::task_context::task_context ( static_coroutine_arena< 1U > *  ,
std::size_t  ,
std::size_t  ,
std::size_t   
)
delete

Member Function Documentation

◆ allocate_frame()

void* tsm::task_context::allocate_frame ( std::size_t  bytes,
std::size_t  alignment 
)
inlinenoexcept

◆ bind()

template<std::size_t Bytes>
void tsm::task_context::bind ( static_coroutine_arena< Bytes > &  arena,
std::size_t  task_id,
std::size_t  instance_id,
std::size_t  frame_limit,
void *  scheduler,
wake_fn  wake,
sleep_fn  sleep,
cancel_sleep_fn  cancel_sleep 
)
inlinenoexcept

◆ cancel()

void tsm::task_context::cancel ( )
inlinenoexcept

◆ cancel_sleep()

void tsm::task_context::cancel_sleep ( )
inlinenoexcept

◆ clear_queued()

void tsm::task_context::clear_queued ( )
inlinenoexcept

◆ failure_reason()

task_failure_reason tsm::task_context::failure_reason ( ) const
inlinenoexcept

◆ generation()

std::uint32_t tsm::task_context::generation ( ) const
inlinenoexcept

◆ instance_id()

std::size_t tsm::task_context::instance_id ( ) const
inlinenoexcept

◆ mark_completed()

void tsm::task_context::mark_completed ( )
inlinenoexcept

◆ mark_failed()

void tsm::task_context::mark_failed ( task_failure_reason  reason = task_failure_reason::unhandled_exception)
inlinenoexcept

◆ mark_ready()

void tsm::task_context::mark_ready ( )
inlinenoexcept

◆ mark_running()

void tsm::task_context::mark_running ( )
inlinenoexcept

◆ now()

tsm::tick_rep tsm::task_context::now ( ) const
inlinenoexcept

◆ predicate_ready()

bool tsm::task_context::predicate_ready ( ) const
inlinenoexcept

◆ prepare_start()

void tsm::task_context::prepare_start ( )
inlinenoexcept

◆ ready_to_resume()

bool tsm::task_context::ready_to_resume ( ) const
inlinenoexcept

◆ request_wake()

void tsm::task_context::request_wake ( )
inlinenoexcept

◆ set_now()

void tsm::task_context::set_now ( tsm::tick_rep  now)
inlinenoexcept

◆ sleep_for()

void tsm::task_context::sleep_for ( tsm::tick_rep  ticks)
inlinenoexcept

◆ status()

task_status tsm::task_context::status ( ) const
inlinenoexcept

◆ task_id()

std::size_t tsm::task_context::task_id ( ) const
inlinenoexcept

◆ wait_kind()

task_wait_kind tsm::task_context::wait_kind ( ) const
inlinenoexcept

◆ wait_until()

template<typename Object , typename Predicate >
void tsm::task_context::wait_until ( Object const &  object,
Predicate  predicate 
)
inlinenoexcept

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