33 lines
2.7 KiB
C++
33 lines
2.7 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
|