// 2020/08/28 - Created by netcan: https://github.com/netcan #pragma once #include "../core/flow_builder.hpp" #include "task_trait.hpp" #include "tuple_utils.hpp" #include "type_list.hpp" namespace tf { namespace dsl { template class Connection { using FROMs = typename TaskTrait::TaskList; using TOs = typename TaskTrait::TaskList; public: using FromTaskList = Unique_t>; using ToTaskList = Unique_t>; }; template > struct Chain; template struct Chainvoid, OUT> { using From = F; using type = OUT; }; template struct ChainT, OUT> { private: using To = typename Chain::From; public: using From = F; using type = typename Chain< T, typename OUT::template appendTo>>::type; }; template struct OneToOneLink { template struct InstanceType { constexpr void build(TasksCB &tasksCb) { constexpr size_t TasksCBSize = std::tuple_size::value; constexpr size_t FromTaskIndex = TupleElementByF_v::template apply>; constexpr size_t ToTaskIndex = TupleElementByF_v::template apply>; static_assert(FromTaskIndex < TasksCBSize && ToTaskIndex < TasksCBSize, "fatal: not find TaskCb in TasksCB"); std::get(tasksCb).task_.precede( std::get(tasksCb).task_); } }; }; } // namespace dsl }; // namespace tf