Subclause | Header | ||
Schedulers | <execution> | ||
Receivers | |||
Operation states | |||
Senders |
Customization point | Purpose | Examples | |
object type | |||
core | provide core execution functionality, and connection between core components | ||
completion functions | called by senders to announce the completion of the work (success, error, or cancellation) | ||
senders | allow the specialization of the provided sender algorithms | ||
queries | allow querying different properties of objects |
|
template<class Default = default_domain, class Sndr>
constexpr auto completion-domain(const Sndr& sndr) noexcept;
template<class Tag, class Env, class Default>
constexpr decltype(auto) query-with-default(
Tag, const Env& env, Default&& value) noexcept(see below);
template<class Sndr>
constexpr auto get-domain-early(const Sndr& sndr) noexcept;
template<class Sndr, class Env>
constexpr auto get-domain-late(const Sndr& sndr, const Env& env) noexcept;
template<size_t I, class Self>
constexpr decltype(auto) get(this Self&& self) noexcept;
template<class Tag, class Data = see below, class... Child>
constexpr auto make-sender(Tag tag, Data&& data, Child&&... child);
[]<class Sndr, class Rcvr, size_t... Is>(
basic-state<Sndr, Rcvr>* op, Sndr&& sndr, index_sequence<Is...>) noexcept(see below)
-> decltype(auto) {
auto& [_, data, ...child] = sndr;
return product-type{connect(
std::forward_like<Sndr>(child),
basic-receiver<Sndr, Rcvr, integral_constant<size_t, Is>>{op})...};
}
template<sender Sndr, queryable... Env>
requires (sizeof...(Env) <= 1)
constexpr sender decltype(auto) transform_sender(Sndr&& sndr, const Env&... env)
noexcept(see below);
template<sender Sndr, queryable Env>
constexpr queryable decltype(auto) transform_env(Sndr&& sndr, Env&& env) noexcept;
template<class Tag, sender Sndr, class... Args>
constexpr decltype(auto) apply_sender(Tag, Sndr&& sndr, Args&&... args)
noexcept(see below);
namespace std::execution {
template<class Domain, sender Sndr, queryable... Env>
requires (sizeof...(Env) <= 1)
constexpr sender decltype(auto) transform_sender(Domain dom, Sndr&& sndr, const Env&... env)
noexcept(see below);
}
namespace std::execution {
template<class Domain, sender Sndr, queryable Env>
constexpr queryable decltype(auto) transform_env(Domain dom, Sndr&& sndr, Env&& env) noexcept;
}
local-state(Sndr&& sndr, Rcvr& rcvr) noexcept;
~local-state();
void notify() noexcept override;
explicit shared-state(Sndr&& sndr);
void start-op() noexcept;
void notify() noexcept;
void inc-ref() noexcept;
void dec-ref() noexcept;
template<class... Args>
void set_value(Args&&... args) && noexcept;
template<class Error>
void set_error(Error&& err) && noexcept;
void set_stopped() && noexcept;
class run-loop-scheduler;
class run-loop-sender;
template<class Rcvr>
struct run-loop-opstate;
run_loop() noexcept;
~run_loop();
run-loop-opstate-base* pop-front();
void push-back(run-loop-opstate-base* item);
run-loop-scheduler get_scheduler();
void run();
void finish();
sender-awaitable(Sndr&& sndr, Promise& p);
value-type await_resume();
template<class OtherPromise>
requires (!same_as<OtherPromise, void>)
void set_continuation(coroutine_handle<OtherPromise> h) noexcept;
template<class Value>
call-result-t<as_awaitable_t, Value, Promise&> await_transform(Value&& value);