|
YOrch 1.0.0
|
Functions | |
| template<std::size_t I, typename Task , typename Tuple > | |
| constexpr auto | apply_adapters_from_const (Task &&task, const Tuple &descriptors) |
| template<std::size_t I, typename Task , typename Tuple > | |
| constexpr auto | apply_adapters_from_mut (Task &&task, Tuple &&descriptors) |
| template<typename T > | |
| constexpr decltype(auto) | forward_member_receiver (const borrowed_member_receiver< T > &holder) noexcept |
| template<typename T > | |
| constexpr decltype(auto) | forward_member_receiver (copied_member_receiver< T > &holder) noexcept |
| template<typename T > | |
| constexpr decltype(auto) | forward_member_receiver (copied_member_receiver< T > &&holder) noexcept |
Keep this rvalue overload so invoke_member_with_receiver(...) can accept a forwarded temporary copied_member_receiver<T>. | |
| template<typename T > | |
| constexpr decltype(auto) | forward_member_receiver (consumed_member_receiver< T > &holder) noexcept |
| template<typename T > | |
| constexpr decltype(auto) | forward_member_receiver (consumed_member_receiver< T > &&holder) noexcept |
| template<typename F , typename Receiver , typename... Args> | |
| constexpr decltype(auto) | invoke_member_with_receiver (F &&func, Receiver &&receiver, Args &&... args) noexcept(noexcept(std::invoke(std::forward< F >(func), forward_member_receiver(std::forward< Receiver >(receiver)), std::forward< Args >(args)...))) |
| template<typename F , typename T , typename Ctx , typename Prev > | |
| constexpr auto | resolve_member_receiver (copy_prev_t< T > spec, exec_context< Ctx, Prev > &ec) noexcept(noexcept(resolve_as< member_class_t< F > >(spec, ec))) |
| template<typename F , typename T , typename Ctx , typename Prev > | |
| constexpr auto | resolve_member_receiver (consume_prev_t< T > spec, exec_context< Ctx, Prev > &ec) noexcept(noexcept(resolve_as< member_class_t< F > >(spec, ec))) |
| template<typename F , typename Spec , typename Ctx , typename Prev > | |
| constexpr auto | resolve_member_receiver (Spec &spec, exec_context< Ctx, Prev > &ec) noexcept(noexcept(resolve_as< member_receiver_arg_t< F > >(spec, ec))) |
| template<typename Self , typename T > | |
| constexpr decltype(auto) | forward_member (T &value) noexcept |
| template<typename Task , typename PolicyLike > | |
| constexpr auto | apply_catch_adapter (Task &&task, PolicyLike &&policy_like) |
| template<typename T , typename F , typename... Specs, std::size_t... I> | |
| consteval bool | forward_prev_bindings_supported_impl (std::index_sequence< I... >) |
| template<typename T , typename F , typename ReceiverSpec , typename... Specs, std::size_t... I> | |
| consteval bool | forward_prev_member_bindings_supported_impl (std::index_sequence< I... >) |
| template<typename T , typename F , typename... Specs> | |
| consteval bind_forward_prev_error | validate_bind_forward_prev () |
| template<typename T , typename F , typename... Specs> | |
| consteval void | emit_bind_forward_prev_diagnostic () |
| template<typename T , typename F , typename ReceiverSpec , typename... Specs> | |
| consteval bind_forward_prev_member_error | validate_bind_forward_prev_member () |
| template<typename T , typename F , typename ReceiverSpec , typename... Specs> | |
| consteval void | emit_bind_forward_prev_member_diagnostic () |
| template<typename F , typename... Specs> | |
| consteval bind_error | validate_bind () |
| template<typename F , typename... Specs> | |
| consteval void | emit_bind_diagnostic () |
| template<typename T , typename F , typename... Specs> | |
| consteval bind_into_error | validate_bind_into () |
| template<typename T , typename F , typename... Specs> | |
| consteval void | emit_bind_into_diagnostic () |
| template<typename F , typename ReceiverSpec , typename... Specs> | |
| consteval bind_member_error | validate_bind_member () |
| template<typename F , typename ReceiverSpec , typename... Specs> | |
| consteval void | emit_bind_member_diagnostic () |
| template<typename T , typename F , typename ReceiverSpec , typename... Specs> | |
| consteval bind_into_member_error | validate_bind_into_member () |
| template<typename T , typename F , typename ReceiverSpec , typename... Specs> | |
| consteval void | emit_bind_into_member_diagnostic () |
| template<typename Plan , std::size_t Parent, std::size_t... Ord> | |
| consteval std::size_t | parent_exclusive_prev_child_count_impl (std::index_sequence< Ord... >) |
| template<typename Plan , std::size_t Parent, std::size_t... Ord> | |
| consteval std::size_t | parent_copy_only_prev_child_count_impl (std::index_sequence< Ord... >) |
| template<typename Plan , std::size_t Parent, std::size_t... Ord> | |
| consteval std::size_t | parent_consume_only_prev_child_count_impl (std::index_sequence< Ord... >) |
| template<typename Plan , std::size_t Parent, std::size_t... Ord> | |
| consteval bool | parent_has_non_copy_or_consume_prev_child_impl (std::index_sequence< Ord... >) |
| template<typename Plan , std::size_t Parent> requires fanout_validatable_plan_node<Plan, Parent> | |
| consteval bool | parent_fanout_policy_valid () |
| template<typename Plan , std::size_t... I> requires (fanout_validatable_plan_node<Plan, I> && ...) | |
| consteval bool | plan_fanout_policy_valid_impl (std::index_sequence< I... >) |
| template<typename Plan , std::size_t... I> | |
| consteval auto | make_plan_fanout_stage_tuple (std::index_sequence< I... >) -> std::tuple< typename fanout_stage_slot< Plan, I >::type... > |
| template<typename Ctx > | |
| constexpr auto | make_exec_context (Ctx &ctx, no_prev) noexcept -> exec_context< Ctx > |
| template<typename Ctx , typename Prev > | |
| constexpr auto | make_exec_context (Ctx &ctx, Prev prev) noexcept -> exec_context< Ctx, Prev > |
| constexpr auto | make_exec_context (no_prev) noexcept -> exec_context< void > |
| template<typename Prev > | |
| constexpr auto | make_exec_context (Prev prev) noexcept -> exec_context< void, Prev > |
| template<typename Plan , std::size_t I, typename Slots , typename FanoutState > | |
| constexpr auto | make_node_prev_view (Slots &slots, FanoutState &fanout) |
| template<std::size_t I, typename Plan , typename Slots , typename Ec > | |
| constexpr node_enter_result | enter_node_with_exec_context (Plan &plan, Slots &slots, Ec &ec) |
| template<std::size_t I, typename Plan , typename Slots > | |
| constexpr node_enter_result | enter_node (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout) |
| template<std::size_t I, typename Plan , typename Slots , typename Ctx > | |
| constexpr node_enter_result | enter_node (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout, Ctx &ctx) |
| template<typename Plan , std::size_t I> requires plan_validatable_node<Plan, I> | |
| consteval bool | node_uses_root_prev_access () |
| template<typename Plan , std::size_t I> requires plan_validatable_node<Plan, I> | |
| consteval bool | node_uses_void_parent_prev_access () |
| template<typename Plan , std::size_t I> requires plan_validatable_node<Plan, I> | |
| consteval bool | node_uses_root_forward_prev () |
| template<typename Plan , std::size_t I> requires plan_validatable_node<Plan, I> | |
| consteval bool | node_uses_void_parent_forward_prev () |
| template<typename Plan , std::size_t I> requires plan_validatable_node<Plan, I> | |
| consteval bool | node_uses_mismatched_forward_prev_parent_type () |
| template<typename Plan , std::size_t... I> requires (plan_validatable_node<Plan, I> && ...) | |
| consteval plan_validation_error | validate_plan_impl (std::index_sequence< I... >) |
| template<typename Plan > | |
| consteval plan_validation_error | validate_plan () |
| template<typename Plan > | |
| consteval void | emit_plan_diagnostic () |
| template<typename Plan , std::size_t I> requires prev_access_validatable_plan_node<Plan, I> | |
| consteval bool | node_prev_source_valid () |
Checks whether node I is structurally allowed to use direct-parent access at all. | |
| template<typename Plan , std::size_t I> requires prev_access_validatable_plan_node<Plan, I> | |
| consteval bool | node_prev_access_valid () |
Checks whether node I's declared prev-access mode is locally valid. | |
| template<typename Plan , std::size_t I> requires prev_access_validatable_plan_node<Plan, I> | |
| consteval bool | node_forward_prev_source_valid () |
| template<typename Plan , std::size_t... I> requires (prev_access_validatable_plan_node<Plan, I> && ...) | |
| consteval bool | plan_prev_source_valid_impl (std::index_sequence< I... >) |
| template<typename Plan , std::size_t... I> requires (prev_access_validatable_plan_node<Plan, I> && ...) | |
| consteval bool | plan_prev_access_valid_impl (std::index_sequence< I... >) |
| template<typename Plan , std::size_t... I> requires (prev_access_validatable_plan_node<Plan, I> && ...) | |
| consteval bool | plan_forward_prev_source_valid_impl (std::index_sequence< I... >) |
| constexpr prev_access_summary | merge_prev_access_summary (prev_access_summary lhs, const prev_access_summary &rhs) noexcept |
| template<typename Spec > | |
| consteval prev_access_summary | summarize_prev_access_spec () |
| constexpr bool | prev_access_summary_is_locally_valid (const prev_access_summary &summary) noexcept |
| template<typename View , std::size_t... I> | |
| consteval bool | task_binding_prev_access_bindings_valid_impl (std::index_sequence< I... >) |
| template<typename View , std::size_t... I> | |
| consteval prev_access_summary | summarize_task_binding_impl (std::index_sequence< I... >) |
| template<typename R > | |
| constexpr step_result | normalize_task_result (R &&r) |
Normalizes a raw task return into scheduler-facing step_result. | |
| template<typename R > | |
| constexpr step_result | extract_step_result (R &&r) |
| template<std::size_t I, typename Slots , typename Raw > | |
| constexpr bool | store_node_output (Slots &slots, Raw &raw) |
| Materializes the payload portion of a node's raw task return into the node's compiled slot, when that return category actually carries a value. | |
| template<std::size_t I, typename Slots > | |
| constexpr step_result | finalize_direct_output_step (Slots &slots, step_result step) |
| template<std::size_t I, std::size_t Ord = 0, typename Plan , typename Slots > | |
| constexpr step_result | run_children (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout) |
| template<std::size_t I, std::size_t Ord = 0, typename Plan , typename Slots , typename Ctx > | |
| constexpr step_result | run_children (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout, Ctx &ctx) |
| template<std::size_t I, typename Plan , typename Slots > | |
| constexpr step_result | run_node (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout) |
| template<std::size_t I, typename Plan , typename Slots , typename Ctx > | |
| constexpr step_result | run_node (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout, Ctx &ctx) |
| template<std::size_t I, typename Plan , typename Slots > | |
| constexpr node_enter_result | enter_node_runtime (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout) |
Per-node runtime thunk for entering node I. | |
| template<std::size_t I, typename Plan , typename Slots , typename Ctx > | |
| constexpr node_enter_result | enter_node_runtime (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout, Ctx &ctx) |
| Context-threading variant of the per-node enter thunk. | |
| template<std::size_t I, typename Slots > | |
| constexpr void | destroy_node_payload_runtime (Slots &slots) noexcept |
Per-node runtime thunk for destroying node I's payload slot. | |
| template<std::size_t I, typename Plan , typename Slots > | |
| constexpr void | prepare_fanout_runtime (Slots &slots, plan_fanout_state< Plan > &fanout) |
| template<std::size_t I, typename Plan > | |
| constexpr void | destroy_fanout_runtime (plan_fanout_state< Plan > &fanout) noexcept |
| template<typename Plan , typename Slots , std::size_t... I> | |
| consteval auto | make_enter_node_dispatch_table (std::index_sequence< I... >) |
| Builds the runtime dispatch table for node entry without external context. | |
| template<typename Plan , typename Slots , typename Ctx , std::size_t... I> | |
| consteval auto | make_enter_node_dispatch_table (std::index_sequence< I... >) |
| Builds the runtime dispatch table for node entry with external context. | |
| template<typename Plan , typename Slots , std::size_t... I> | |
| consteval auto | make_destroy_node_dispatch_table (std::index_sequence< I... >) |
| Builds the runtime dispatch table for payload destruction. | |
| template<typename Plan , typename Slots , std::size_t... I> | |
| consteval auto | make_prepare_fanout_dispatch_table (std::index_sequence< I... >) |
| template<typename Plan , typename Slots , std::size_t... I> | |
| consteval auto | make_destroy_fanout_dispatch_table (std::index_sequence< I... >) |
| template<typename Plan , std::size_t... I> | |
| consteval auto | make_requires_fanout_staging_table (std::index_sequence< I... >) |
| template<typename Plan , typename EnterInvoker , typename DestroyInvoker , typename PrepareFanoutInvoker , typename DestroyFanoutInvoker > | |
| constexpr step_result | run_explicit_heap_stack_loop (const auto &requires_fanout_staging_by_index, EnterInvoker enter_node_by_index, DestroyInvoker destroy_node_payload_by_index, PrepareFanoutInvoker prepare_fanout_by_index, DestroyFanoutInvoker destroy_fanout_by_index) |
| Executes serial DFS using a heap-backed explicit stack. | |
| template<typename Plan , typename Slots > | |
| constexpr step_result | run_explicit_heap_stack (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout) |
| template<typename Plan , typename Slots , typename Ctx > | |
| constexpr step_result | run_explicit_heap_stack (Plan &plan, Slots &slots, plan_fanout_state< Plan > &fanout, Ctx &ctx) |
| template<typename Plan , std::size_t... I> | |
| consteval auto | make_payload_node_array (std::index_sequence< I... >) |
| Builds the compile-time node -> has-payload table for a plan. | |
| template<typename Plan , std::size_t... I> | |
| consteval auto | make_slot_logical_policy_array (std::index_sequence< I... >) |
| Builds the compile-time node -> logical slot policy table. | |
| template<typename Plan > | |
| consteval auto | make_one_to_one_physical_slot_indices () |
| Builds the one-to-one node -> physical slot index table. | |
| template<typename Plan > | |
| consteval auto | make_serial_dfs_compact_slot_layout () |
| Builds the serial-DFS compact node -> physical slot layout. | |
| constexpr slot_physical_policy | join_slot_physical_policy (slot_physical_policy left, slot_logical_policy right) noexcept |
| Joins one node's logical policy into a physical slot policy. | |
| template<typename Plan , std::size_t PhysicalSlotCount, std::size_t... I> | |
| consteval auto | make_physical_slot_sizes (const std::array< std::size_t, Plan::node_count > &indices, std::index_sequence< I... >) |
| Computes the required raw storage size for each physical slot. | |
| template<typename Plan , std::size_t PhysicalSlotCount, std::size_t... I> | |
| consteval auto | make_physical_slot_alignments (const std::array< std::size_t, Plan::node_count > &indices, std::index_sequence< I... >) |
| Computes the required alignment for each physical slot. | |
| template<typename Plan , std::size_t PhysicalSlotCount, std::size_t... I> | |
| consteval auto | make_physical_slot_policies (const std::array< std::size_t, Plan::node_count > &indices, std::index_sequence< I... >) |
| Computes the storage policy for each physical slot. | |
| template<typename Layout , std::size_t... K> | |
| auto | make_erased_slots_tuple (std::index_sequence< K... >) -> std::tuple< erased_slot< Layout::physical_slot_sizes[K], Layout::physical_slot_alignments[K], Layout::template physical_slot_policy< K > >... > |
| Type factory for a layout's erased-slot storage tuple. | |
| template<typename Plan , std::size_t PhysicalSlot> | |
| consteval std::size_t | one_to_one_physical_slot_owner_node () |
| Finds the unique node that owns a one-to-one physical slot. | |
| template<typename Plan , std::size_t... K> | |
| auto | make_typed_slots_tuple (std::index_sequence< K... >) -> std::tuple< typed_slot< typename Plan::template output_type< one_to_one_physical_slot_owner_node< Plan, K >()>, Plan::template slot_logical_policy_for< one_to_one_physical_slot_owner_node< Plan, K >()> >... > |
| Type factory for a plan's typed one-to-one slot tuple. | |
| template<typename R > | |
| constexpr auto | default_catch_failure_result () noexcept |
Produces the default failure result used by catch_as_failure(task). | |
| template<typename R , typename Policy > | |
| auto | policy_catch_failure_result (Policy &policy, const std::exception_ptr &ep) noexcept |
| Invokes a fallback policy to produce the exception-path raw result. | |
| template<typename PolicyResult > | |
| constexpr auto | void_task_success_result () noexcept |
Produces the success-path raw result for a wrapped void task when a custom fallback policy is installed. | |
| template<typename R > | |
| constexpr bool | raw_result_requests_retry (const R &r) noexcept |
| template<typename Raw > | |
| constexpr auto | retry_exhausted_as_failure (const Raw &raw) noexcept |
| template<typename Policy , typename Raw > | |
| constexpr auto | handle_retry_exhausted (const Policy &policy, Raw &&raw) noexcept |
| template<typename... Nodes> | |
| consteval auto | make_level_array () |
| template<std::size_t N> | |
| consteval auto | make_slot_index_array () |
| template<std::size_t N> | |
| consteval auto | make_parent_index_array (const std::array< std::size_t, N > &levels) |
| Reconstructs each node's direct parent index from the recorded level sequence. | |
| template<std::size_t N> | |
| consteval auto | make_child_layout (const std::array< std::size_t, N > &parents) |
| Builds a flat direct-child adjacency layout from per-node parent indices. | |
Definition at line 36 of file resolve.hpp.
Definition at line 33 of file resolve.hpp.
Definition at line 42 of file resolve.hpp.
Definition at line 39 of file resolve.hpp.
| using yorch::detail::declared_task_output_protocol_t = typedef typename declared_task_output_protocol<Task>::type |
Definition at line 70 of file traits.hpp.
Definition at line 41 of file traits.hpp.
| using yorch::detail::declared_task_raw_result_t = typedef typename declared_task_raw_result<Task>::type |
Definition at line 66 of file traits.hpp.
Definition at line 182 of file traits.hpp.
| using yorch::detail::forward_prev_unique_prev_payload_t = typedef typename forward_prev_unique_prev_payload<Specs...>::type |
Definition at line 65 of file forward_prev.hpp.
Definition at line 30 of file resolve.hpp.
Definition at line 148 of file traits.hpp.
| using yorch::detail::last_node_t = typedef typename last_node<Nodes...>::type |
Definition at line 22 of file metadata.hpp.
| using yorch::detail::member_borrowed_receiver_t = typedef std::remove_reference_t<member_receiver_arg_t<F> > |
Definition at line 136 of file traits.hpp.
| using yorch::detail::member_class_t = typedef typename member_function_traits<std::remove_cvref_t<F> >::class_type |
Definition at line 128 of file traits.hpp.
Definition at line 156 of file traits.hpp.
| using yorch::detail::member_nth_arg_t = typedef typename member_function_traits<std::remove_cvref_t<F> >::template arg<I> |
Definition at line 140 of file traits.hpp.
| using yorch::detail::member_receiver_arg_t = typedef typename member_function_traits<std::remove_cvref_t<F> >::receiver_arg_type |
Definition at line 132 of file traits.hpp.
| using yorch::detail::member_result_t = typedef typename member_function_traits<std::remove_cvref_t<F> >::result_type |
Definition at line 124 of file traits.hpp.
| using yorch::detail::node_prev_view_t = typedef decltype(make_node_prev_view<Plan, I>( std::declval<Slots&>(), std::declval<plan_fanout_state<Plan>&>())) |
Definition at line 69 of file node_entry.hpp.
| using yorch::detail::normalized_prev_access_spec_traits = typedef prev_access_spec_traits<std::remove_cvref_t<Spec> > |
Definition at line 108 of file prev_access_specs.hpp.
| using yorch::detail::nth_arg_t = typedef typename function_traits<std::remove_cvref_t<F> >::template arg<I> |
Definition at line 118 of file traits.hpp.
| using yorch::detail::plan_erased_slots_tuple_t = typedef decltype(make_erased_slots_tuple<Layout>( std::make_index_sequence<Layout::physical_slot_count> {})) |
Erased backend storage tuple for compact/layout-driven plan slots.
Definition at line 343 of file layout.hpp.
| using yorch::detail::plan_fanout_stage_tuple_t = typedef decltype(make_plan_fanout_stage_tuple<Plan>(std::make_index_sequence<Plan::node_count> {})) |
Definition at line 179 of file fanout.hpp.
| using yorch::detail::plan_typed_slots_tuple_t = typedef decltype(make_typed_slots_tuple<Plan>( std::make_index_sequence<payload_node_count_v<Plan> > {})) |
Typed backend storage tuple for one-to-one owned payload slots.
Definition at line 390 of file layout.hpp.
Definition at line 52 of file traits.hpp.
| using yorch::detail::raw_task_result_t = typedef decltype(std::declval<Task>().invoke_raw(std::declval<exec_context<Ctx, Prev>&>())) |
Definition at line 15 of file traits.hpp.
| using yorch::detail::result_t = typedef typename function_traits<std::remove_cvref_t<F> >::result_type |
Definition at line 121 of file traits.hpp.
Definition at line 126 of file traits.hpp.
Definition at line 110 of file traits.hpp.
Convenience alias for a task's raw return type.
This avoids repeatedly spelling typename task_raw_result<T>::type.
| Task | Task type being analyzed. |
Definition at line 53 of file traits.hpp.
| using yorch::detail::task_tree_node_t = typedef task_tree_node<Level, std::decay_t<Task>, std::remove_cvref_t<FanoutPolicy> > |
Definition at line 64 of file metadata.hpp.
|
strong |
| Enumerator | |
|---|---|
| ok | |
| member_callable_not_supported | |
| callable_shape_invalid | |
| arity_mismatch | |
Definition at line 11 of file validate.hpp.
Definition at line 18 of file forward_prev.hpp.
| Enumerator | |
|---|---|
| ok | |
| invalid_output_type | |
| callable_not_member | |
| direct_output_member_not_supported | |
| arity_mismatch | |
| invalid_result_type | |
| prev_access_count_invalid | |
| payload_type_mismatch | |
| binding_mode_not_supported | |
Definition at line 31 of file forward_prev.hpp.
| Enumerator | |
|---|---|
| ok | |
| invalid_output_type | |
| member_callable_not_supported | |
| callable_shape_invalid | |
| missing_output_parameter | |
| arity_mismatch | |
| last_parameter_not_direct_out | |
Definition at line 18 of file validate.hpp.
| Enumerator | |
|---|---|
| ok | |
| invalid_output_type | |
| callable_not_member | |
| missing_output_parameter | |
| arity_mismatch | |
| last_parameter_not_direct_out | |
Definition at line 35 of file validate.hpp.
| Enumerator | |
|---|---|
| ok | |
| callable_not_member | |
| direct_output_member_not_supported | |
| arity_mismatch | |
Definition at line 28 of file validate.hpp.
Describes how a node's logical output is backed at runtime.
none means the node has no output payload. owned means the node owns physical slot storage for its output. forwarded_prev means the node has a logical output type, but its value is statically forwarded from the direct parent's canonical owner rather than materialized into a new slot.
| Enumerator | |
|---|---|
| none | |
| owned | |
| forwarded_prev | |
Definition at line 46 of file policy.hpp.
| Enumerator | |
|---|---|
| ok | |
| prev_access_root_node | |
| prev_access_void_parent | |
| forward_prev_root_node | |
| forward_prev_void_parent | |
| forward_prev_parent_type_mismatch | |
| prev_access_mode_invalid | |
| fanout_policy_invalid | |
Definition at line 15 of file plan_validation.hpp.
| Enumerator | |
|---|---|
| none | |
| borrow | |
| borrow_mut | |
| copy | |
| consume | |
Definition at line 10 of file prev_access_specs.hpp.
Node-local slot semantics inferred from a task's result protocol.
This policy answers whether a plan node logically owns a payload slot: none is used for void output nodes; maybe_payload is used when a successful-looking task invocation may still skip materializing a payload, such as direct-output tasks; must_payload is used when success always materializes a payload value.
| Enumerator | |
|---|---|
| none | |
| maybe_payload | |
| must_payload | |
Definition at line 17 of file policy.hpp.
Storage-level policy for a physical slot after layout selection.
This policy is derived from every logical owner mapped to the same physical slot. none is only the empty/default state before any owner contributes; a physical slot is must_payload only when all owners are logically must_payload; if any owner is logically maybe_payload, the physical slot becomes maybe_payload and carries an engagement flag.
| Enumerator | |
|---|---|
| none | |
| maybe_payload | |
| must_payload | |
Definition at line 32 of file policy.hpp.
|
constexpr |
Definition at line 85 of file adapters.hpp.
|
constexpr |
Definition at line 96 of file adapters.hpp.
|
constexpr |
Definition at line 20 of file adapters.hpp.
Produces the default failure result used by catch_as_failure(task).
This helper is valid only for raw result categories accepted by default_catch_supported_v.
| R | Raw task return type. |
R. Definition at line 21 of file result_helpers.hpp.
|
constexprnoexcept |
Definition at line 76 of file serial_dfs_explicit_heap_stack.hpp.
Per-node runtime thunk for destroying node I's payload slot.
Payload destruction is also a compile-time operation (slots.destroy<I>()), so the explicit-stack executor needs the same "fix `I`, erase the rest" adapter layer as node entry.
Definition at line 66 of file serial_dfs_explicit_heap_stack.hpp.
Definition at line 60 of file validate.hpp.
Definition at line 151 of file forward_prev.hpp.
Definition at line 225 of file forward_prev.hpp.
Definition at line 104 of file validate.hpp.
Definition at line 193 of file validate.hpp.
Definition at line 150 of file validate.hpp.
Definition at line 133 of file plan_validation.hpp.
|
constexpr |
Definition at line 125 of file node_entry.hpp.
|
constexpr |
Definition at line 135 of file node_entry.hpp.
|
constexpr |
Per-node runtime thunk for entering node I.
The explicit-stack executor discovers the current node only through the runtime frame.node_index, but the real node execution helper is still the compile-time template enter_node<I>(...). This thunk fixes I and exposes a uniform function-pointer shape so later code can dispatch by index.
Definition at line 39 of file serial_dfs_explicit_heap_stack.hpp.
|
constexpr |
Context-threading variant of the per-node enter thunk.
Definition at line 50 of file serial_dfs_explicit_heap_stack.hpp.
|
constexpr |
Definition at line 80 of file node_entry.hpp.
|
constexpr |
Definition at line 38 of file result.hpp.
|
constexpr |
Definition at line 117 of file result.hpp.
Definition at line 114 of file member_receiver.hpp.
|
constexprnoexcept |
Definition at line 28 of file member_receiver.hpp.
|
constexprnoexcept |
Definition at line 58 of file member_receiver.hpp.
|
constexprnoexcept |
Definition at line 53 of file member_receiver.hpp.
|
constexprnoexcept |
Keep this rvalue overload so invoke_member_with_receiver(...) can accept a forwarded temporary copied_member_receiver<T>.
We still return holder.value as an lvalue on purpose: copy_prev<T>() means "invoke the member function on a local copy", not "move the copied
receiver into the member call".
Definition at line 46 of file member_receiver.hpp.
|
constexprnoexcept |
Definition at line 33 of file member_receiver.hpp.
Definition at line 75 of file forward_prev.hpp.
| consteval bool yorch::detail::forward_prev_member_bindings_supported_impl | ( | std::index_sequence< I... > | ) |
Definition at line 103 of file forward_prev.hpp.
|
constexprnoexcept |
Definition at line 112 of file result_helpers.hpp.
|
constexprnoexcept |
Definition at line 63 of file member_receiver.hpp.
|
constexprnoexcept |
Joins one node's logical policy into a physical slot policy.
left is the physical policy accumulated for a physical slot so far, and right is the next logical owner mapped to that slot. Logical none does not contribute. An empty physical policy adopts the first payload owner, and any maybe_payload owner upgrades the whole physical slot to maybe_payload, because the shared storage must carry an engagement flag if any possible owner may skip materializing a payload. The result stays must_payload only when every contributing owner is logically must_payload.
Definition at line 156 of file layout.hpp.
| consteval auto yorch::detail::make_child_layout | ( | const std::array< std::size_t, N > & | parents | ) |
Builds a flat direct-child adjacency layout from per-node parent indices.
The returned layout stores, for each node:
counts)indices array (offsets)indices)This relies on the tree invariant: every non-root node has exactly one direct parent, so the full set of child edges can be reconstructed from the parents array alone.
| N | Number of nodes in the plan. |
| parents | Direct parent index for each node. The root is expected to use the sentinel value N. |
parents. Definition at line 104 of file layout.hpp.
Definition at line 141 of file serial_dfs_explicit_heap_stack.hpp.
Builds the runtime dispatch table for payload destruction.
This is the destruction-side counterpart to make_enter_node_dispatch_table(...). Once a frame leaves the active DFS path, the loop uses dispatch[node_index](slots) to call the matching slots.destroy<I>() instantiation.
Definition at line 125 of file serial_dfs_explicit_heap_stack.hpp.
Builds the runtime dispatch table for node entry without external context.
After expansion this returns an array equivalent to:
{ &enter_node_runtime<0, Plan, Slots>, &enter_node_runtime<1, Plan, Slots>, ... }
The explicit-stack loop can then execute dispatch[node_index](plan, slots) to bridge from runtime node indices back into compile-time node-specific code.
Definition at line 97 of file serial_dfs_explicit_heap_stack.hpp.
Builds the runtime dispatch table for node entry with external context.
Definition at line 109 of file serial_dfs_explicit_heap_stack.hpp.
| auto yorch::detail::make_erased_slots_tuple | ( | std::index_sequence< K... > | ) | -> std::tuple< erased_slot< Layout::physical_slot_sizes[K], Layout::physical_slot_alignments[K], Layout::template physical_slot_policy< K > >... > |
Type factory for a layout's erased-slot storage tuple.
This declaration is intentionally body-less: callers use it only in decltype(...) to expand physical slot indices K... into std::tuple<erased_slot<size, alignment, policy>...>.
|
constexprnoexcept |
Definition at line 25 of file node_entry.hpp.
|
constexprnoexcept |
Definition at line 31 of file node_entry.hpp.
|
constexprnoexcept |
Definition at line 36 of file node_entry.hpp.
|
constexprnoexcept |
Definition at line 42 of file node_entry.hpp.
Definition at line 9 of file layout.hpp.
|
constexpr |
Definition at line 48 of file node_entry.hpp.
Builds the one-to-one node -> physical slot index table.
In this layout, every owned-storage node gets its own distinct physical slot. Nodes without owned storage keep the no_physical_slot sentinel instead.
Definition at line 72 of file layout.hpp.
| consteval auto yorch::detail::make_parent_index_array | ( | const std::array< std::size_t, N > & | levels | ) |
Reconstructs each node's direct parent index from the recorded level sequence.
For every non-root node, the direct parent is the nearest earlier node whose level is exactly one less than the current node's level. The root keeps the sentinel value N, which means "no parent".
This rule relies on the current task_tree recording convention: nodes are stored in insertion order as a valid tree-shaped level sequence, so scanning backward to the nearest level - 1 entry recovers the direct parent.
| N | Number of nodes in the recorded level sequence. |
| levels | Node levels in insertion order. |
levels. Definition at line 40 of file layout.hpp.
Builds the compile-time node -> has-payload table for a plan.
Each entry is true when the corresponding node needs owned physical slot storage. Nodes whose logical output is statically forwarded from their direct parent do not contribute storage here.
Definition at line 24 of file layout.hpp.
| consteval auto yorch::detail::make_physical_slot_alignments | ( | const std::array< std::size_t, Plan::node_count > & | indices, |
| std::index_sequence< I... > | |||
| ) |
Computes the required alignment for each physical slot.
This mirrors make_physical_slot_sizes(...), but records the maximum alignof(output_type<I>) for every physical slot. When multiple nodes share one erased slot, the slot must satisfy the strictest alignment requirement among all mapped payload owners.
| PhysicalSlotCount | Number of physical slots in the layout. |
| I | Node indices supplied by the std::index_sequence<I...> argument. |
| indices | Node -> physical slot mapping; no_physical_slot entries are ignored. |
Definition at line 223 of file layout.hpp.
| consteval auto yorch::detail::make_physical_slot_policies | ( | const std::array< std::size_t, Plan::node_count > & | indices, |
| std::index_sequence< I... > | |||
| ) |
Computes the storage policy for each physical slot.
The fold expression expands over node indices, uses indices[I] to find the physical slot for node I, and joins that node's slot_logical_policy_for<I> into the accumulated slot_physical_policy. Nodes mapped to no_physical_slot are ignored. When multiple nodes share one physical slot, the result is maybe_payload if any owner is logically maybe_payload; otherwise it remains must_payload.
| PhysicalSlotCount | Number of physical slots in the layout. |
| I | Node indices supplied by the std::index_sequence<I...> argument. |
| indices | Node -> physical slot mapping; no_physical_slot entries are ignored. |
Definition at line 256 of file layout.hpp.
| consteval auto yorch::detail::make_physical_slot_sizes | ( | const std::array< std::size_t, Plan::node_count > & | indices, |
| std::index_sequence< I... > | |||
| ) |
Computes the required raw storage size for each physical slot.
indices is the node -> physical slot mapping produced by a slot layout. The fold expression expands over node indices, skips void nodes, then uses indices[I] to update the size for the physical slot owned by node I. When multiple nodes map to the same physical slot, the stored size is the maximum sizeof(output_type<I>) among those owners.
| PhysicalSlotCount | Number of physical slots in the layout. |
| I | Node indices supplied by the std::index_sequence<I...> argument. |
| indices | Node -> physical slot mapping; no_physical_slot entries are ignored. |
Definition at line 192 of file layout.hpp.
| consteval auto yorch::detail::make_plan_fanout_stage_tuple | ( | std::index_sequence< I... > | ) | -> std::tuple< typename fanout_stage_slot< Plan, I >::type... > |
Definition at line 133 of file serial_dfs_explicit_heap_stack.hpp.
Definition at line 149 of file serial_dfs_explicit_heap_stack.hpp.
Builds the serial-DFS compact node -> physical slot layout.
The serial executor only keeps owned payload slots on the current root-to-node DFS path live at the same time. Sibling subtrees run one after another, so payload nodes at the same path payload depth can safely reuse the same physical slot.
For example, given:
the payload depths are node 0 -> 1, node 1 -> 2, node 2 -> 2, node 3 -> 1, and node 4 -> 2. Payload nodes use depth - 1 as the physical slot index, so node 0 -> slot 0, while node 1 and node 4 both map to slot 1. The final physical_slot_count is the maximum payload depth across the tree.
Definition at line 123 of file layout.hpp.
Definition at line 14 of file layout.hpp.
Builds the compile-time node -> logical slot policy table.
Each entry mirrors Plan::slot_logical_policy_for<I>. Layouts use this collected table when multiple logical nodes map to the same physical slot and their logical policies must be joined into one storage-level slot_physical_policy.
Definition at line 39 of file layout.hpp.
| auto yorch::detail::make_typed_slots_tuple | ( | std::index_sequence< K... > | ) | -> std::tuple< typed_slot< typename Plan::template output_type< one_to_one_physical_slot_owner_node< Plan, K >()>, Plan::template slot_logical_policy_for< one_to_one_physical_slot_owner_node< Plan, K >()> >... > |
Type factory for a plan's typed one-to-one slot tuple.
This declaration is intentionally body-less: callers use it only in decltype(...) to expand physical slot indices K... into typed slots for their unique payload-owner node. Void-output nodes do not appear in this tuple, so its size matches the one-to-one layout's physical_slot_count.
|
constexprnoexcept |
Definition at line 24 of file prev_access_task_traits.hpp.
Definition at line 67 of file prev_access_plan_validation.hpp.
Checks whether node I's declared prev-access mode is locally valid.
Fan-out compatibility is validated separately by the fan-out policy layer.
Definition at line 59 of file prev_access_plan_validation.hpp.
Checks whether node I is structurally allowed to use direct-parent access at all.
Definition at line 31 of file prev_access_plan_validation.hpp.
Definition at line 82 of file plan_validation.hpp.
Definition at line 59 of file plan_validation.hpp.
Definition at line 33 of file plan_validation.hpp.
Definition at line 68 of file plan_validation.hpp.
Definition at line 43 of file plan_validation.hpp.
|
constexpr |
Normalizes a raw task return into scheduler-facing step_result.
Plain value payloads are treated as successful completion, step_result passes through unchanged, and task_result<T> contributes only its control status here. Payload extraction itself is handled by later execution stages.
| R | Raw return object type. |
| r | Raw return object emitted by invoke_raw(...). |
step_result. Definition at line 24 of file result.hpp.
| consteval std::size_t yorch::detail::one_to_one_physical_slot_owner_node | ( | ) |
Finds the unique node that owns a one-to-one physical slot.
The one-to-one layout maps each payload-producing node to a distinct physical slot and skips void nodes. The typed backend tuple is therefore expanded by physical slot index, not by node index; this helper reverses the mapping so make_typed_slots_tuple(...) can recover the owner node's output_type and slot_logical_policy.
For example, if nodes 0:int, 1:string, 2:void, 3:void, 4:bool map to slots 0, 1, no_physical_slot, no_physical_slot, 2. then physical slot 2 is owned by node 4.
Definition at line 361 of file layout.hpp.
| consteval std::size_t yorch::detail::parent_consume_only_prev_child_count_impl | ( | std::index_sequence< Ord... > | ) |
Definition at line 67 of file fanout.hpp.
| consteval std::size_t yorch::detail::parent_copy_only_prev_child_count_impl | ( | std::index_sequence< Ord... > | ) |
Definition at line 57 of file fanout.hpp.
| consteval std::size_t yorch::detail::parent_exclusive_prev_child_count_impl | ( | std::index_sequence< Ord... > | ) |
Definition at line 48 of file fanout.hpp.
Definition at line 91 of file fanout.hpp.
| consteval bool yorch::detail::parent_has_non_copy_or_consume_prev_child_impl | ( | std::index_sequence< Ord... > | ) |
Definition at line 78 of file fanout.hpp.
Definition at line 119 of file fanout.hpp.
| consteval bool yorch::detail::plan_forward_prev_source_valid_impl | ( | std::index_sequence< I... > | ) |
Definition at line 94 of file prev_access_plan_validation.hpp.
| consteval bool yorch::detail::plan_prev_access_valid_impl | ( | std::index_sequence< I... > | ) |
Definition at line 88 of file prev_access_plan_validation.hpp.
| consteval bool yorch::detail::plan_prev_source_valid_impl | ( | std::index_sequence< I... > | ) |
Definition at line 82 of file prev_access_plan_validation.hpp.
|
inlinenoexcept |
Invokes a fallback policy to produce the exception-path raw result.
| R | Raw task return type of the wrapped task. |
| Policy | Policy type. |
| policy | Stored fallback policy. |
| ep | Captured exception from the wrapped task. |
R. Definition at line 39 of file result_helpers.hpp.
|
constexpr |
Definition at line 71 of file serial_dfs_explicit_heap_stack.hpp.
|
constexprnoexcept |
Definition at line 67 of file prev_access_task_traits.hpp.
Definition at line 70 of file result_helpers.hpp.
|
constexprnoexcept |
Definition at line 88 of file member_receiver.hpp.
|
constexprnoexcept |
Definition at line 75 of file member_receiver.hpp.
|
constexprnoexcept |
Definition at line 101 of file member_receiver.hpp.
Definition at line 89 of file result_helpers.hpp.
|
constexpr |
Definition at line 84 of file serial_dfs.hpp.
|
constexpr |
Definition at line 117 of file serial_dfs.hpp.
|
constexpr |
Definition at line 322 of file serial_dfs_explicit_heap_stack.hpp.
|
constexpr |
Definition at line 343 of file serial_dfs_explicit_heap_stack.hpp.
|
constexpr |
Executes serial DFS using a heap-backed explicit stack.
The loop itself only knows runtime node indices stored in frames, so all type-specific work is delegated to the enter/destroy dispatch callables. Together they form the bridge between:
frame.node_indexenter_node<I>(...) and slots.destroy<I>() Definition at line 166 of file serial_dfs_explicit_heap_stack.hpp.
|
constexpr |
Definition at line 45 of file serial_dfs.hpp.
|
constexpr |
Definition at line 64 of file serial_dfs.hpp.
Materializes the payload portion of a node's raw task return into the node's compiled slot, when that return category actually carries a value.
This helper is the value-storage counterpart to extract_step_result(...). The executor first derives control-flow status from the raw return, then uses this function to decide whether the current node produced a payload that should remain alive for its subtree and therefore be written into slot I.
The storage rules are:
void and step_result do not carry a payload, so no slot write happensT writes that returned value directly into slot Itask_result<T> writes only the wrapped value and only when the step status is success; non-success task_result<T> values leave the slot emptyPayloads are moved into the slot because the slot becomes the owning storage for the remainder of the node's subtree traversal.
| I | Node index whose slot should receive the payload. |
| Slots | Concrete plan_exec_slots<...>-like storage type. |
| Raw | Raw return object type produced by invoke_raw(...). |
| slots | Plan slot storage used by the current DFS execution. |
| raw | Raw task return object to inspect and, when applicable, move from. |
Definition at line 69 of file result.hpp.
| consteval prev_access_summary yorch::detail::summarize_prev_access_spec | ( | ) |
Definition at line 37 of file prev_access_task_traits.hpp.
| consteval prev_access_summary yorch::detail::summarize_task_binding_impl | ( | std::index_sequence< I... > | ) |
Definition at line 174 of file prev_access_task_traits.hpp.
| consteval bool yorch::detail::task_binding_prev_access_bindings_valid_impl | ( | std::index_sequence< I... > | ) |
Definition at line 150 of file prev_access_task_traits.hpp.
| consteval bind_error yorch::detail::validate_bind | ( | ) |
Definition at line 45 of file validate.hpp.
| consteval bind_forward_prev_error yorch::detail::validate_bind_forward_prev | ( | ) |
Definition at line 123 of file forward_prev.hpp.
| consteval bind_forward_prev_member_error yorch::detail::validate_bind_forward_prev_member | ( | ) |
Definition at line 191 of file forward_prev.hpp.
| consteval bind_into_error yorch::detail::validate_bind_into | ( | ) |
Definition at line 81 of file validate.hpp.
| consteval bind_into_member_error yorch::detail::validate_bind_into_member | ( | ) |
Definition at line 172 of file validate.hpp.
| consteval bind_member_error yorch::detail::validate_bind_member | ( | ) |
Definition at line 135 of file validate.hpp.
| consteval plan_validation_error yorch::detail::validate_plan | ( | ) |
Definition at line 128 of file plan_validation.hpp.
| consteval plan_validation_error yorch::detail::validate_plan_impl | ( | std::index_sequence< I... > | ) |
Definition at line 103 of file plan_validation.hpp.
|
constexprnoexcept |
Produces the success-path raw result for a wrapped void task when a custom fallback policy is installed.
The policy decides the exception-path step_result, so successful void execution must mirror that same raw result shape.
| PolicyResult | Raw result type returned by the policy. |
PolicyResult. Definition at line 63 of file result_helpers.hpp.
Definition at line 11 of file resolve.hpp.
|
inlineconstexpr |
Definition at line 45 of file metadata.hpp.
Definition at line 89 of file forward_prev.hpp.
Definition at line 118 of file forward_prev.hpp.
Definition at line 114 of file forward_prev.hpp.
Definition at line 85 of file forward_prev.hpp.
Definition at line 22 of file resolve.hpp.
Definition at line 8 of file common.hpp.
|
inlineconstexpr |
Definition at line 47 of file plan_exec_slots.hpp.
Definition at line 177 of file traits.hpp.
Definition at line 137 of file layout.hpp.
|
inlineconstexpr |
Definition at line 130 of file layout.hpp.
Definition at line 133 of file layout.hpp.
Definition at line 141 of file layout.hpp.
Definition at line 73 of file resolve.hpp.
Definition at line 45 of file resolve.hpp.
Definition at line 103 of file traits.hpp.
Reports whether the default catch_as_failure(task) adapter can synthesize a failure result for raw return type R.
The no-policy overload intentionally stays conservative: it only supports return categories where the library can manufacture a failure result without inventing a payload object.
| R | Raw task return type. |
Definition at line 29 of file traits.hpp.
Definition at line 166 of file traits.hpp.
Definition at line 94 of file forward_prev.hpp.
|
inlineconstexpr |
Definition at line 15 of file forward_prev.hpp.
Definition at line 69 of file forward_prev.hpp.
Definition at line 53 of file traits.hpp.
Definition at line 77 of file adapters.hpp.
|
inlineconstexpr |
Definition at line 63 of file adapters.hpp.
Definition at line 128 of file prev_access_specs.hpp.
Definition at line 118 of file prev_access_specs.hpp.
Definition at line 148 of file prev_access_specs.hpp.
Definition at line 138 of file prev_access_specs.hpp.
Definition at line 156 of file prev_access_specs.hpp.
Definition at line 79 of file traits.hpp.
Definition at line 152 of file prev_access_specs.hpp.
Definition at line 144 of file traits.hpp.
|
inlineconstexpr |
Definition at line 42 of file metadata.hpp.
Definition at line 152 of file traits.hpp.
Definition at line 19 of file prev_access_specs.hpp.
Definition at line 175 of file prev_access_specs.hpp.
|
inlineconstexpr |
Sentinel physical slot index meaning "this node has no storage".
Layouts assign real physical slot indices only to payload-producing nodes. Nodes with void output keep this value instead, and compact slot storage also reuses it to mark that no node currently owns an erased slot.
Definition at line 59 of file policy.hpp.
Definition at line 17 of file context.hpp.
Definition at line 44 of file fanout.hpp.
Definition at line 39 of file fanout.hpp.
Definition at line 144 of file fanout.hpp.
Definition at line 139 of file fanout.hpp.
Definition at line 129 of file fanout.hpp.
Definition at line 46 of file layout.hpp.
Definition at line 54 of file layout.hpp.
Definition at line 124 of file fanout.hpp.
Definition at line 107 of file prev_access_plan_validation.hpp.
Definition at line 103 of file prev_access_plan_validation.hpp.
Definition at line 99 of file prev_access_plan_validation.hpp.
Definition at line 163 of file plan_validation.hpp.
|
inlineconstexpr |
Definition at line 13 of file plan_validation.hpp.
|
inlineconstexpr |
Definition at line 124 of file plan_validation.hpp.
Definition at line 165 of file prev_access_specs.hpp.
Definition at line 49 of file resolve.hpp.
Definition at line 62 of file resolve.hpp.
Definition at line 58 of file resolve.hpp.
Definition at line 88 of file resolve.hpp.
Definition at line 78 of file resolve.hpp.
Definition at line 66 of file resolve.hpp.
Definition at line 53 of file resolve.hpp.
Definition at line 83 of file resolve.hpp.
Definition at line 84 of file result_helpers.hpp.
Definition at line 50 of file layout.hpp.
Definition at line 14 of file resolve.hpp.
|
inlineconstexpr |
Definition at line 153 of file traits.hpp.
Definition at line 306 of file prev_access_task_traits.hpp.
|
inlineconstexpr |
Definition at line 193 of file traits.hpp.
Definition at line 326 of file prev_access_task_traits.hpp.
Definition at line 322 of file prev_access_task_traits.hpp.
Definition at line 23 of file fanout.hpp.
Definition at line 318 of file prev_access_task_traits.hpp.
Definition at line 16 of file fanout.hpp.
Definition at line 330 of file prev_access_task_traits.hpp.
Definition at line 74 of file traits.hpp.
Definition at line 314 of file prev_access_task_traits.hpp.
Definition at line 80 of file traits.hpp.
Definition at line 310 of file prev_access_task_traits.hpp.
|
inlineconstexpr |
Definition at line 11 of file context.hpp.
|
inlineconstexpr |
Definition at line 14 of file context.hpp.