78 lines
2.8 KiB
C++
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
|