Files
Aethera/kernel/kernel/module/task_flow/export/export.h
T
2026-09-02 13:32:56 +08:00

78 lines
2.8 KiB
C++

#pragma once
#include "global.hpp"
#include <cstdint>
#include <exception>
#include <expected>
#include <functional>
#include <proxy/proxy.h>
#include <string>
namespace aethera {
enum struct Add_Task_Graph_Result : std::uint8_t {
work_missing
};
enum struct Add_Condition_Task_Graph_Result : std::uint8_t {
condition_missing
};
enum struct Compose_Task_Graph_Result : std::uint8_t {
component_unavailable,
dependency_cycle,
already_composed
};
enum struct Precede_Task_Graph_Result : std::uint8_t {
preceded,
node_unavailable,
node_stale,
different_graph
};
enum struct Describe_Task_Graph_Result : std::uint8_t {
described,
key_missing
};
enum struct Describe_Task_Graph_Node_Result : std::uint8_t {
described,
node_unavailable,
node_stale,
key_missing
};
enum struct Run_Taskflow_Result : std::uint8_t {
submitted,
runtime_not_initialized,
completion_missing,
observation_unavailable
};
enum struct Taskflow_Unknown_Failure_Policy : std::uint8_t {
fast_fail,
exception
};
enum struct Initialize_Task_Runtime_Result : std::uint8_t {
initialized,
invalid_worker_count,
exception_boundary_missing,
exception_boundary_unexpected,
already_initialized,
initialization_in_progress
};
enum struct Take_Taskflow_Observation_Result : std::uint8_t {
not_recorded,
recording,
already_taken
};
using Taskflow_Completion = std::function<void(std::exception_ptr)>;
using Taskflow_Exception_Boundary = std::function<void(std::exception_ptr)>;
namespace task_flow {
struct Task_Node : facade_builder::add_skill<pro::skills::rtti>::build {};
struct Task_Graph_Component : facade_builder::add_skill<pro::skills::rtti>::build {};
struct Task_Graph_Common_Facade : facade_builder
::add_convention<_component, proxy<Task_Graph_Component>()>
::add_convention<_empty, bool() const noexcept>
::support_relocation<pro::constraint_level::nothrow>
::build {};
struct Task_Graph_Build_Facade : facade_builder::add_facade_with_substitution<Task_Graph_Common_Facade>
::add_convention<_add, std::expected<proxy<Task_Node>, Add_Task_Graph_Result>(std::string, std::function<void()>)>
::add_convention<_clear, void()>::build {};
struct Task_Graph_Compose_Facade : facade_builder::add_facade_with_substitution<Task_Graph_Common_Facade>::add_convention<_compose, std::expected<proxy<Task_Node>, Compose_Task_Graph_Result>(std::string, proxy<Task_Graph_Component>&)>::add_convention<_precede, Precede_Task_Graph_Result(proxy<Task_Node>&, proxy<Task_Node>&)>::add_convention<_run, Run_Taskflow_Result(Taskflow_Completion)>::build {};
struct Task_Graph_Facade : facade_builder::add_facade_with_substitution<Task_Graph_Build_Facade>::add_facade_with_substitution<Task_Graph_Compose_Facade>::build {};
proxy<Task_Graph_Facade> make_task_graph(std::string name);
} // namespace task_flow
} // namespace aethera