|
1 | 1 | // 2020/08/28 - Created by netcan: https://github.com/netcan
|
2 | 2 | #pragma once
|
3 | 3 | #include "../core/flow_builder.hpp"
|
4 |
| -#include "task_analyzer.hpp" |
5 | 4 | #include "job_trait.hpp"
|
| 5 | +#include "task_analyzer.hpp" |
6 | 6 |
|
7 | 7 | namespace tf {
|
8 |
| -template<typename ...Links> |
9 |
| -class TaskDsl { |
10 |
| - using AllJobs = typename TaskAnalyzer<Links...>::AllJobs; |
11 |
| - using JobsCb = typename Map_t<AllJobs, JobCb>::template exportTo<std::tuple>; |
12 |
| - |
13 |
| - using OneToOneLinkSet = typename TaskAnalyzer<Links...>::OneToOneLinkSet; |
14 |
| - template <typename OneToOneLink> |
15 |
| - struct OneToOneLinkInstanceType |
16 |
| - { using type = typename OneToOneLink::template InstanceType<JobsCb>; }; |
17 |
| - using OneToOneLinkInstances = |
18 |
| - typename Map_t<OneToOneLinkSet, OneToOneLinkInstanceType>::template exportTo<std::tuple>; |
| 8 | +template <typename... Links> class TaskDsl { |
| 9 | + using AllJobs = typename TaskAnalyzer<Links...>::AllJobs; |
| 10 | + using JobsCb = typename Map_t<AllJobs, JobCb>::template exportTo<std::tuple>; |
| 11 | + |
| 12 | + using OneToOneLinkSet = typename TaskAnalyzer<Links...>::OneToOneLinkSet; |
| 13 | + template <typename OneToOneLink> struct OneToOneLinkInstanceType { |
| 14 | + using type = typename OneToOneLink::template InstanceType<JobsCb>; |
| 15 | + }; |
| 16 | + using OneToOneLinkInstances = |
| 17 | + typename Map_t<OneToOneLinkSet, |
| 18 | + OneToOneLinkInstanceType>::template exportTo<std::tuple>; |
| 19 | + |
19 | 20 | public:
|
20 |
| - constexpr TaskDsl(FlowBuilder& flow_builder) { |
21 |
| - build_jobs_cb(flow_builder, std::make_index_sequence<AllJobs::size>{}); |
22 |
| - build_links(std::make_index_sequence<OneToOneLinkSet::size>{}); |
23 |
| - } |
| 21 | + constexpr TaskDsl(FlowBuilder &flow_builder) { |
| 22 | + build_jobs_cb(flow_builder, std::make_index_sequence<AllJobs::size>{}); |
| 23 | + build_links(std::make_index_sequence<OneToOneLinkSet::size>{}); |
| 24 | + } |
| 25 | + |
24 | 26 | private:
|
25 |
| - template<size_t ...Is> |
26 |
| - void build_jobs_cb(FlowBuilder& flow_builder, std::index_sequence<Is...>) { |
27 |
| - (std::get<Is>(jobsCb_).build(flow_builder), ...); |
28 |
| - } |
29 |
| - |
30 |
| - template<size_t ...Is> |
31 |
| - void build_links(std::index_sequence<Is...>) { |
32 |
| - (std::get<Is>(links_).build(jobsCb_), ...); |
33 |
| - } |
| 27 | + template <size_t... Is> |
| 28 | + void build_jobs_cb(FlowBuilder &flow_builder, std::index_sequence<Is...>) { |
| 29 | + (std::get<Is>(jobsCb_).build(flow_builder), ...); |
| 30 | + } |
| 31 | + |
| 32 | + template <size_t... Is> void build_links(std::index_sequence<Is...>) { |
| 33 | + (std::get<Is>(links_).build(jobsCb_), ...); |
| 34 | + } |
| 35 | + |
34 | 36 | private:
|
35 |
| - JobsCb jobsCb_; |
36 |
| - OneToOneLinkInstances links_; |
| 37 | + JobsCb jobsCb_; |
| 38 | + OneToOneLinkInstances links_; |
37 | 39 | };
|
38 | 40 |
|
39 | 41 | #define __some_job(...) tf::SomeJob<__VA_ARGS__>
|
40 | 42 | #define __fork(...) __some_job(__VA_ARGS__)
|
41 | 43 | #define __merge(...) auto(__some_job(__VA_ARGS__))
|
42 | 44 | #define __link(Job) auto(Job)
|
43 | 45 | #define __taskbuild(...) tf::TaskDsl<__VA_ARGS__>
|
44 |
| -#define __def_task(name, ...) struct name { \ |
45 |
| - auto operator()() __VA_ARGS__ \ |
46 |
| -} |
| 46 | +#define __def_task(name, ...) \ |
| 47 | + struct name { \ |
| 48 | + auto operator()() __VA_ARGS__ \ |
| 49 | + } |
47 | 50 |
|
48 |
| -} |
| 51 | +} // namespace tf |
0 commit comments