Input<T, Id> + ID: uint64_t # m_value: T + Input(value: T) AbstractInputConnector # m_output: AbstractOutputConnector* # m_owner: AbstractTaskConfigurator* + AbstractInputConnector(owner: AbstractTaskConfigurator*) + operator<<(output: AbstractOutputConnector&) InputConnector<T> # m_output: AbstractOutputConnector* + InputConnector(owner: AbstractTaskConfigurator*) Output<T, Id> + ID: uint64_t # m_value: T + Output(value: T) AbstractOutputConnector # m_owner: AbstractTaskConfigurator* + AbstractOutputConnector(owner: AbstractTaskConfigurator*) + operator>>(input: AbstractInputConnector&): AbstractOutputConnector& OutputConnector<T> + OutputConnector(owner: AbstractTaskConfigurator*) Pipeline - m_tasks: map<string, unique_ptr<AbstractTaskConfigurator>> + add<Task>(name: string&): TaskConfigurator<Task>* + run() Scheduler + Scheduler(task_configurators: map<string, unique_ptr<AbstractTaskConfigurator>>&) + run() ~ can_run(task_container: AbstractTaskContainer*) ~ schedule(task_container: AbstractTaskContainer*) ~ next_task(): AbstractTaskContainer* ~ following_tasks(task_container: AbstractTaskContainer*) AbstractTaskConfigurator + make(): unique_ptr<AbstractTaskContainer> + input(name: string&): AbstractInputConnector& + input(id: uint64_t): AbstractInputConnector& + output(name: string&): AbstractOutputConnector& + output(id: uint64_t): AbstractOutputConnector& TaskConfigurator<Task> # m_inputs: map<uint64_t, unique_ptr<AbstractInputConnector>> # m_outputs: map<uint64_t, unique_ptr<AbstractOutputConnector>> + make(): unique_ptr<AbstractTaskContainer> + input(name: string&): AbstractInputConnector& + input(id: uint64_t): AbstractInputConnector& + output(name: string&): AbstractOutputConnector& + output(id: uint64_t): AbstractOutputConnector& # parseInputParameters() # parseInputParameter() # parseOutputParameters() # parseOutputParameter() AbstractTaskContainer + run() TaskContainer + run() - invoke(integer_sequence<size_t, index...>): ? - get(): auto - write(output: Output&): ? has_run<T> is_unique_ptr<T> is_unique_ptr<void> is_shared_ptr<T> ReturnWrapper <ParameterTypes> ReturnWrapper<tuple<ParameterTypes...>> ReturnWrapper<void> TaskHelper 0..* 0..1 0..* 0..* 0..1 0..1