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 " job_trait .hpp"
4
+ #include " task_trait .hpp"
5
5
#include " meta_macro.hpp"
6
6
#include " task_analyzer.hpp"
7
7
@@ -12,53 +12,53 @@ template <typename CONTEXT = EmptyContext, typename... Chains> class TaskDsl {
12
12
using Links = Unique_t<Flatten_t<TypeList<typename Chain<Chains>::type...>>>;
13
13
using Analyzer = typename Links::template exportTo<TaskAnalyzer>;
14
14
15
- using AllJobs = typename Analyzer::AllJobs ;
15
+ using AllTasks = typename Analyzer::AllTasks ;
16
16
17
- template <typename J > struct JobCbWithContext {
18
- using type = JobCb<J , CONTEXT>;
17
+ template <typename TASK > struct TaskCbWithContext {
18
+ using type = TaskCb<TASK , CONTEXT>;
19
19
};
20
- using JobsCB =
21
- typename Map_t<AllJobs, JobCbWithContext >::template exportTo<std::tuple>;
20
+ using TasksCB =
21
+ typename Map_t<AllTasks, TaskCbWithContext >::template exportTo<std::tuple>;
22
22
23
23
using OneToOneLinkSet = typename Analyzer::OneToOneLinkSet;
24
24
template <typename OneToOneLink> struct OneToOneLinkInstanceType {
25
- using type = typename OneToOneLink::template InstanceType<JobsCB >;
25
+ using type = typename OneToOneLink::template InstanceType<TasksCB >;
26
26
};
27
27
using OneToOneLinkInstances =
28
28
typename Map_t<OneToOneLinkSet,
29
29
OneToOneLinkInstanceType>::template exportTo<std::tuple>;
30
30
31
31
public:
32
32
constexpr TaskDsl (FlowBuilder &flow_builder, const CONTEXT &context = {}) {
33
- build_jobs_cb (flow_builder, context,
34
- std::make_index_sequence<AllJobs ::size>{});
33
+ build_tasks_cb (flow_builder, context,
34
+ std::make_index_sequence<AllTasks ::size>{});
35
35
build_links (std::make_index_sequence<OneToOneLinkSet::size>{});
36
36
}
37
37
38
- template <typename Job >
38
+ template <typename TASK >
39
39
Task& get_task () {
40
- constexpr size_t JobsCBSize = std::tuple_size<JobsCB >::value;
41
- constexpr size_t JobIndex =
42
- TupleElementByF_v<JobsCB, IsJob<Job >::template apply>;
43
- static_assert (JobIndex < JobsCBSize , " fatal: not find JobCb in JobsCB " );
44
- return std::get<JobIndex>(jobsCb_). job_ ;
40
+ constexpr size_t TasksCBSize = std::tuple_size<TasksCB >::value;
41
+ constexpr size_t TaskIndex =
42
+ TupleElementByF_v<TasksCB, IsTask<TASK >::template apply>;
43
+ static_assert (TaskIndex < TasksCBSize , " fatal: not find TaskCb in TasksCB " );
44
+ return std::get<TaskIndex>(tasksCb_). task_ ;
45
45
}
46
46
47
47
private:
48
48
template <size_t ... Is>
49
- void build_jobs_cb (FlowBuilder &flow_builder, const CONTEXT &context,
49
+ void build_tasks_cb (FlowBuilder &flow_builder, const CONTEXT &context,
50
50
std::index_sequence<Is...>) {
51
- auto _ = {0 , (std::get<Is>(jobsCb_ ).build (flow_builder, context), 0 )...};
51
+ auto _ = {0 , (std::get<Is>(tasksCb_ ).build (flow_builder, context), 0 )...};
52
52
(void )_;
53
53
}
54
54
55
55
template <size_t ... Is> void build_links (std::index_sequence<Is...>) {
56
- auto _ = {0 , (std::get<Is>(links_).build (jobsCb_ ), 0 )...};
56
+ auto _ = {0 , (std::get<Is>(links_).build (tasksCb_ ), 0 )...};
57
57
(void )_;
58
58
}
59
59
60
60
private:
61
- JobsCB jobsCb_ ;
61
+ TasksCB tasksCb_ ;
62
62
OneToOneLinkInstances links_;
63
63
};
64
64
@@ -77,27 +77,27 @@ constexpr TaskDsl<CONTEXT, Chains...> taskDsl(FlowBuilder &flow_builder,
77
77
// /////////////////////////////////////////////////////////////////////////////
78
78
// def_task(TASK_NAME, { return a action lambda })
79
79
#define def_task (name, ...) \
80
- struct name : tf::dsl::JobSignature , tf::dsl::EmptyContext { \
80
+ struct name : tf::dsl::TaskSignature , tf::dsl::EmptyContext { \
81
81
name (const EmptyContext &context) : EmptyContext(context) {} \
82
82
auto operator ()() { return [] __VA_ARGS__; } \
83
83
};
84
84
#define def_taskc (name, Context, ...) \
85
- struct name : tf::dsl::JobSignature , Context { \
85
+ struct name : tf::dsl::TaskSignature , Context { \
86
86
name (const Context &context) : Context(context) {} \
87
87
auto operator ()() { \
88
88
/* copy *this(copy CONTEXT to lambda) */ \
89
89
return [*this ] __VA_ARGS__; \
90
90
} \
91
91
};
92
92
93
- // some_task(A, B, C) means SomeJob
94
- #define some_task (...) auto (*)(tf::dsl::SomeJob <__VA_ARGS__>)
93
+ // some_task(A, B, C) means SomeTask
94
+ #define some_task (...) auto (*)(tf::dsl::SomeTask <__VA_ARGS__>)
95
95
// same as some_task
96
96
#define fork (...) some_task(__VA_ARGS__)
97
97
// same as some_task
98
98
#define merge (...) some_task(__VA_ARGS__)
99
99
// task(A) means a task A
100
- #define task (Job ) auto (*)(Job )
100
+ #define task (Task ) auto (*)(Task )
101
101
// taskbuild(...) build a task dsl graph
102
102
#define taskbuild (...) \
103
103
tf::dsl::taskDsl<void TF_PASTE (TF_REPEAT_, TF_GET_ARG_COUNT(__VA_ARGS__))( \
0 commit comments