Skip to content

Commit 2d78528

Browse files
committed
namspace dsl
1 parent 923f9fa commit 2d78528

8 files changed

Lines changed: 51 additions & 35 deletions

File tree

examples/simple_dsl.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
// 2020/08/28 - Created by netcan: https://github.com/netcan
22
// A simple example to capture the following task dependencies.
3-
// using to describe
4-
// TaskA---->TaskB---->TaskD
5-
// TaskA---->TaskC---->TaskD
3+
// using Task DSL to describe
4+
// TaskA -> fork(TaskB, TaskC) -> TaskD
65

76
#include <taskflow/taskflow.hpp> // the only include you need
87
#include <taskflow/dsl/task_dsl.hpp> // for support dsl
98

109
int main(){
1110
tf::Executor executor;
1211
tf::Taskflow taskflow("simple");
13-
__def_task(A, { return []() { std::cout << "TaskA\n"; }; });
14-
__def_task(B, { return []() { std::cout << "TaskB\n"; }; });
15-
__def_task(C, { return []() { std::cout << "TaskC\n"; }; });
16-
__def_task(D, { return []() { std::cout << "TaskD\n"; }; });
12+
def_task(A, { return []() { std::cout << "TaskA\n"; }; });
13+
def_task(B, { return []() { std::cout << "TaskB\n"; }; });
14+
def_task(C, { return []() { std::cout << "TaskC\n"; }; });
15+
def_task(D, { return []() { std::cout << "TaskD\n"; }; });
1716

18-
__taskbuild( // +---+
19-
__chain(__tsk(A) // +---->| B |-----+
20-
-> __fork(B, C) // | +---+ |
21-
-> __tsk(D)) // +---+ +-v-+
17+
taskbuild( // +---+
18+
chain(task(A) // +---->| B |-----+
19+
-> fork(B, C) // | +---+ |
20+
-> task(D)) // +---+ +-v-+
2221
) {taskflow}; // | A | | D |
2322
// +---+ +-^-+
2423
// | +---+ |

examples/visualization_dsl.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// 2020/08/28 - Created by netcan: https://github.com/netcan
22
// This example demonstrates how to use 'dump' method to inspect
33
// a taskflow graph.
4-
// use taskflow dsl
4+
// use task dsl
55

66
#include <taskflow/taskflow.hpp>
77
#include <taskflow/dsl/task_dsl.hpp> // for support dsl
@@ -12,18 +12,18 @@ int main(){
1212
// ------------------------------------------------------
1313
// Static Tasking
1414
// ------------------------------------------------------
15-
__def_task(A, { return []() { std::cout << "TaskA\n"; }; });
16-
__def_task(B, { return []() { std::cout << "TaskB\n"; }; });
17-
__def_task(C, { return []() { std::cout << "TaskC\n"; }; });
18-
__def_task(D, { return []() { std::cout << "TaskD\n"; }; });
19-
__def_task(E, { return []() { std::cout << "TaskE\n"; }; });
20-
21-
__taskbuild(
22-
__chain(__tsk(A)
23-
-> __fork(B, C)
24-
-> __tsk(D)),
25-
__chain(__merge(A, B)
26-
-> __tsk(E))
15+
def_task(A, { return []() { std::cout << "TaskA\n"; }; });
16+
def_task(B, { return []() { std::cout << "TaskB\n"; }; });
17+
def_task(C, { return []() { std::cout << "TaskC\n"; }; });
18+
def_task(D, { return []() { std::cout << "TaskD\n"; }; });
19+
def_task(E, { return []() { std::cout << "TaskE\n"; }; });
20+
21+
taskbuild(
22+
chain(task(A)
23+
-> fork(B, C)
24+
-> task(D)),
25+
chain(merge(A, B)
26+
-> task(E))
2727
) {tf};
2828

2929
// std::cout << "[dump without name assignment]\n";

taskflow/dsl/connection.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "type_list.hpp"
77

88
namespace tf {
9+
namespace dsl {
910
template <typename F, typename T> class Connection {
1011
using FROMs = typename JobTrait<F>::JobList;
1112
using TOs = typename JobTrait<T>::JobList;
@@ -55,4 +56,5 @@ template <typename FROM, typename TO> struct OneToOneLink {
5556
}
5657
};
5758
};
59+
} // namespace dsl
5860
}; // namespace tf

taskflow/dsl/job_trait.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <type_traits>
77

88
namespace tf {
9+
namespace dsl {
910
struct JobSignature {};
1011

1112
template <typename J> struct JobCb {
@@ -31,5 +32,5 @@ struct JobTrait<J, std::enable_if_t<std::is_base_of<JobSignature, J>::value>> {
3132
template <typename... J> struct JobTrait<SomeJob<J...>> {
3233
using JobList = typename SomeJob<J...>::JobList;
3334
};
34-
35+
} // namespace dsl
3536
} // namespace tf

taskflow/dsl/task_analyzer.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <type_traits>
66

77
namespace tf {
8+
namespace dsl {
89
template <typename... Links> class TaskAnalyzer {
910
template <typename FROMs, typename TOs, typename = void>
1011
struct BuildOneToOneLink;
@@ -35,4 +36,5 @@ template <typename... Links> class TaskAnalyzer {
3536
Unique_t<Flatten_t<Map_t<TypeList<Links...>, OneToOneLinkSetF>>>;
3637
};
3738

39+
} // namespace dsl
3840
} // namespace tf

taskflow/dsl/task_dsl.hpp

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "task_analyzer.hpp"
66

77
namespace tf {
8+
namespace dsl {
89
template <typename... Chains> class TaskDsl {
910
using Links = Unique_t<Flatten_t<TypeList<typename Chain<Chains>::type...>>>;
1011
using Analyzer = typename Links::template exportTo<TaskAnalyzer>;
@@ -42,17 +43,24 @@ template <typename... Chains> class TaskDsl {
4243
JobsCb jobsCb_;
4344
OneToOneLinkInstances links_;
4445
};
46+
}
47+
} // namespace tf
4548

46-
#define __def_task(name, ...) \
47-
struct name : tf::JobSignature { \
49+
// def_task(TASK_NAME, { return a action lambda })
50+
#define def_task(name, ...) \
51+
struct name : tf::dsl::JobSignature { \
4852
auto operator()() __VA_ARGS__ \
4953
}
5054

51-
#define __some_tsk(...) auto (*)(tf::SomeJob<__VA_ARGS__>)
52-
#define __fork(...) __some_tsk(__VA_ARGS__)
53-
#define __merge(...) __some_tsk(__VA_ARGS__)
54-
#define __tsk(Job) auto (*)(Job)
55-
#define __chain(link) link->void
56-
#define __taskbuild(...) tf::TaskDsl<__VA_ARGS__>
57-
58-
} // namespace tf
55+
// some_task(A, B, C) means SomeJob
56+
#define some_task(...) auto (*)(tf::dsl::SomeJob<__VA_ARGS__>)
57+
// same as some_task
58+
#define fork(...) some_task(__VA_ARGS__)
59+
// same as some_task
60+
#define merge(...) some_task(__VA_ARGS__)
61+
// task(A) means a task A
62+
#define task(Job) auto (*)(Job)
63+
// chain(task(A) -> task(B) -> ...) for build a task chain
64+
#define chain(link) link->void
65+
// taskbuild(...) build a task dsl graph
66+
#define taskbuild(...) tf::dsl::TaskDsl<__VA_ARGS__>

taskflow/dsl/tuple_utils.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <tuple>
55

66
namespace tf {
7+
namespace dsl {
78
namespace detail {
89
// get tuple element index by f, if not exists then index >= tuple_size
910
template <typename TUP, template <typename> class F, typename = void>
@@ -26,4 +27,5 @@ struct TupleElementByF<std::tuple<H, Ts...>, F,
2627

2728
template <typename TUP, template <typename> class F>
2829
constexpr size_t TupleElementByF_v = detail::TupleElementByF<TUP, F>::Index;
30+
} // namespace dsl
2931
} // namespace tf

taskflow/dsl/type_list.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <cstddef>
44

55
namespace tf {
6+
namespace dsl {
67
template <typename...> using void_t = void;
78

89
template <typename... Ts> struct TypeList {
@@ -131,4 +132,5 @@ template <typename IN> class Unique<IN, void_t<typename IN::head>> {
131132
public:
132133
using type = typename eraseHead::template prepend<typename IN::head>;
133134
};
135+
} // namespace dsl
134136
} // namespace tf

0 commit comments

Comments
 (0)