30 using ptr_type = LIBCOPP_COPP_NAMESPACE_ID::memory::intrusive_ptr<coroutine_context>;
48#if defined(LIBCOPP_MACRO_ENABLE_STD_EXCEPTION_PTR) && LIBCOPP_MACRO_ENABLE_STD_EXCEPTION_PTR
49 using coroutine_context_base::unhandle_exception_;
65#ifdef LIBCOPP_MACRO_USE_SEGMENTED_STACKS
91 size_t coroutine_size,
size_t private_buffer_size) LIBCOPP_MACRO_NOEXCEPT;
93 template <typename TRunner>
95 size_t coroutine_size,
96 size_t private_buffer_size) LIBCOPP_MACRO_NOEXCEPT {
98 p, [runner](
void *private_data) {
return (*runner)(private_data); }, callee_stack, coroutine_size,
108 LIBCOPP_COPP_API
int start(
void *priv_data =
nullptr);
110#if defined(LIBCOPP_MACRO_ENABLE_STD_EXCEPTION_PTR) && LIBCOPP_MACRO_ENABLE_STD_EXCEPTION_PTR
117 LIBCOPP_COPP_API
int start(std::exception_ptr &unhandled,
void *priv_data =
nullptr) LIBCOPP_MACRO_NOEXCEPT;
126 LIBCOPP_COPP_API
int resume(
void *priv_data =
nullptr);
128#if defined(LIBCOPP_MACRO_ENABLE_STD_EXCEPTION_PTR) && LIBCOPP_MACRO_ENABLE_STD_EXCEPTION_PTR
135 LIBCOPP_COPP_API
int resume(std::exception_ptr &unhandled,
void *priv_data =
nullptr) LIBCOPP_MACRO_NOEXCEPT;
143 LIBCOPP_COPP_API
int yield(
void **priv_data =
nullptr) LIBCOPP_MACRO_NOEXCEPT;
153 template <class TAWAITABLE, class TERROR_TRANSFORM,
156 await_value(TAWAITABLE &&awaitable, TERROR_TRANSFORM &&error_transform) noexcept(
159 return awaitable.inject_await(
this, std::forward<TERROR_TRANSFORM>(error_transform));
156 await_value(TAWAITABLE &&awaitable, TERROR_TRANSFORM &&error_transform) noexcept( {
…}
170 template <
class TAWAITABLE,
171 class = nostd::enable_if_t<stackful_inject_awaitable<nostd::remove_cvref_t<TAWAITABLE>>::value>>
173 std::is_nothrow_copy_constructible<container_value_type<TAWAITABLE>>::value &&
base type of all coroutine context
LIBCOPP_COPP_NAMESPACE_ID::util::lock::atomic_int_type< LIBCOPP_COPP_NAMESPACE_ID::util::lock::unsafe_int_type< int > > status_
size_t private_buffer_size_
std::function< int(void *)> callback_type
base type of all stackful coroutine context
LIBCOPP_COPP_NAMESPACE_ID::memory::intrusive_ptr< coroutine_context > ptr_type
LIBCOPP_COPP_API_HEAD_ONLY container_value_type< TAWAITABLE > await_value(TAWAITABLE &&awaitable, TERROR_TRANSFORM &&error_transform) noexcept(std::is_nothrow_copy_constructible< container_value_type< TAWAITABLE > >::value &&noexcept(error_transform(COPP_EC_ARGS_ERROR)))
Waits for the specified awaitable object to finish and retrieves its result.
LIBCOPP_COPP_API coroutine_context() LIBCOPP_MACRO_NOEXCEPT
coroutine_context_base::flag_type flag_type
fcontext::fcontext_t caller_
stack_context callee_stack_
LIBCOPP_COPP_API int start(void *priv_data=nullptr)
start coroutine
LIBCOPP_COPP_API int yield(void **priv_data=nullptr) LIBCOPP_MACRO_NOEXCEPT
yield coroutine
LIBCOPP_COPP_API int resume(void *priv_data=nullptr)
resume coroutine
fcontext::fcontext_t callee_
coroutine_context_base::callback_type callback_type
static LIBCOPP_COPP_API int create(coroutine_context *p, callback_type &&runner, const stack_context &callee_stack, size_t coroutine_size, size_t private_buffer_size) LIBCOPP_MACRO_NOEXCEPT
create coroutine context at stack context callee_
LIBCOPP_COPP_API_HEAD_ONLY container_value_type< TAWAITABLE > await_value(TAWAITABLE &&awaitable) noexcept(std::is_nothrow_copy_constructible< container_value_type< TAWAITABLE > >::value &&noexcept(stackful_channel_error_transform< container_value_type< TAWAITABLE > >()(COPP_EC_ARGS_ERROR)))
Waits for the specified awaitable object to finish and retrieves its result.
coroutine_context_base::status_type status_type
coroutine_context * from_co
coroutine_context * to_co
status of safe coroutine context base