Skip to content

Commit 5addb2e

Browse files
committed
updated examples to fully c++14
1 parent 4d42403 commit 5addb2e

9 files changed

Lines changed: 70 additions & 73 deletions

File tree

.travis.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,18 @@ cache:
1515
# ref 1: https://github.com/google/re2
1616
matrix:
1717
include:
18+
19+
# Linux g++6
20+
- os: linux
21+
compiler: g++
22+
addons:
23+
apt:
24+
sources:
25+
- ubuntu-toolchain-r-test
26+
packages:
27+
- g++-6
28+
env:
29+
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
1830

1931
# Linux g++7
2032
- os: linux

CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ target_link_libraries(
117117
)
118118

119119
# CXX target properties
120-
#set(CMAKE_CXX_STANDARD 17)
120+
#set(CMAKE_CXX_STANDARD 14)
121121
#set(CMAKE_CXX_STANDARD_REQUIRED ON)
122122
#set(CMAKE_CXX_EXTENSIONS OFF)
123123

@@ -176,7 +176,7 @@ find_package(Threads REQUIRED)
176176

177177
add_library(${PROJECT_NAME} INTERFACE)
178178

179-
target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_17)
179+
target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_14)
180180
target_include_directories(${PROJECT_NAME} INTERFACE
181181
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
182182
$<INSTALL_INTERFACE:include/>

README.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -702,23 +702,22 @@ The first run finishes before the second run, and the second run finishes before
702702
# System Requirements
703703

704704
To use the latest [Cpp-Taskflow](https://github.com/cpp-taskflow/cpp-taskflow/archive/master.zip), you only need a [C++14][C++14] compiler.
705-
See the [C++ compiler support](https://en.cppreference.com/w/cpp/compiler_support) status.
706-
707-
<div align="right"><b><a href="#table-of-contents">[↑]</a></b></div>
708-
709705

710-
# Compile Unit Tests, Examples, and Benchmarks
711-
712-
Cpp-Taskflow uses [CMake](https://cmake.org/) to build examples and unit tests
713-
that are written in C++17.
714-
To compile them, you need:
715706
+ GNU C++ Compiler v7.3 with -std=c++14
716707
+ Clang C++ Compiler v6.0 with -std=c++14
717708
+ Microsoft Visual Studio Version 15.7 (MSVC++ 19.14); see [vcpkg guide](https://github.com/cpp-taskflow/cpp-taskflow/issues/143)
718709
+ Apple Clang Version 11.0
719710

711+
See the [C++ compiler support](https://en.cppreference.com/w/cpp/compiler_support) status.
712+
713+
<div align="right"><b><a href="#table-of-contents">[↑]</a></b></div>
714+
715+
# Compile Unit Tests, Examples, and Benchmarks
716+
717+
Cpp-Taskflow uses [CMake](https://cmake.org/) to build examples and unit tests.
720718
We recommend using out-of-source build.
721719

720+
722721
```bash
723722
~$ cmake --version # must be at least 3.9 or higher
724723
~$ mkdir build

examples/composition.cpp

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@ void composition_example_1() {
1111

1212
// f1 has three independent tasks
1313
tf::Taskflow f1("F1");
14-
auto [f1A, f1B, f1C] = f1.emplace(
15-
[&](){ std::cout << "F1 TaskA\n"; },
16-
[&](){ std::cout << "F1 TaskB\n"; },
17-
[&](){ std::cout << "F1 TaskC\n"; }
18-
);
14+
auto f1A = f1.emplace([](){ std::cout << "F1 TaskA\n"; });
15+
auto f1B = f1.emplace([](){ std::cout << "F1 TaskB\n"; });
16+
auto f1C = f1.emplace([](){ std::cout << "F1 TaskC\n"; });
1917
f1A.name("f1A");
2018
f1B.name("f1B");
2119
f1C.name("f1C");
@@ -26,12 +24,10 @@ void composition_example_1() {
2624
// |----> f2C ----> f1_module_task ----> f2D
2725
// f2B ---
2826
tf::Taskflow f2("F2");
29-
auto [f2A, f2B, f2C, f2D] = f2.emplace(
30-
[&](){ std::cout << " F2 TaskA\n"; },
31-
[&](){ std::cout << " F2 TaskB\n"; },
32-
[&](){ std::cout << " F2 TaskC\n"; },
33-
[&](){ std::cout << " F2 TaskD\n"; }
34-
);
27+
auto f2A = f2.emplace([](){ std::cout << " F2 TaskA\n"; });
28+
auto f2B = f2.emplace([](){ std::cout << " F2 TaskB\n"; });
29+
auto f2C = f2.emplace([](){ std::cout << " F2 TaskC\n"; });
30+
auto f2D = f2.emplace([](){ std::cout << " F2 TaskD\n"; });
3531
f2A.name("f2A");
3632
f2B.name("f2B");
3733
f2C.name("f2C");
@@ -58,10 +54,8 @@ void composition_example_2() {
5854

5955
// f1 has two independent tasks
6056
tf::Taskflow f1("F1");
61-
auto [f1A, f1B] = f1.emplace(
62-
[&](){ std::cout << "F1 TaskA\n"; },
63-
[&](){ std::cout << "F1 TaskB\n"; }
64-
);
57+
auto f1A = f1.emplace([&](){ std::cout << "F1 TaskA\n"; });
58+
auto f1B = f1.emplace([&](){ std::cout << "F1 TaskB\n"; });
6559
f1A.name("f1A");
6660
f1B.name("f1B");
6761

@@ -71,11 +65,9 @@ void composition_example_2() {
7165
//
7266
// f1_module_task
7367
tf::Taskflow f2("F2");
74-
auto [f2A, f2B, f2C] = f2.emplace(
75-
[&](){ std::cout << " F2 TaskA\n"; },
76-
[&](){ std::cout << " F2 TaskB\n"; },
77-
[&](){ std::cout << " F2 TaskC\n"; }
78-
);
68+
auto f2A = f2.emplace([&](){ std::cout << " F2 TaskA\n"; });
69+
auto f2B = f2.emplace([&](){ std::cout << " F2 TaskB\n"; });
70+
auto f2C = f2.emplace([&](){ std::cout << " F2 TaskC\n"; });
7971
f2A.name("f2A");
8072
f2B.name("f2B");
8173
f2C.name("f2C");

examples/observer.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,14 @@ int main(){
99
// Create a taskflow of eight tasks
1010
tf::Taskflow taskflow;
1111

12-
auto [A, B, C, D, E, F, G, H] = taskflow.emplace(
13-
[] () { std::cout << "1\n"; },
14-
[] () { std::cout << "2\n"; },
15-
[] () { std::cout << "3\n"; },
16-
[] () { std::cout << "4\n"; },
17-
[] () { std::cout << "5\n"; },
18-
[] () { std::cout << "6\n"; },
19-
[] () { std::cout << "7\n"; },
20-
[] () { std::cout << "8\n"; }
21-
);
12+
auto A = taskflow.emplace([] () { std::cout << "1\n"; });
13+
auto B = taskflow.emplace([] () { std::cout << "2\n"; });
14+
auto C = taskflow.emplace([] () { std::cout << "3\n"; });
15+
auto D = taskflow.emplace([] () { std::cout << "4\n"; });
16+
auto E = taskflow.emplace([] () { std::cout << "5\n"; });
17+
auto F = taskflow.emplace([] () { std::cout << "6\n"; });
18+
auto G = taskflow.emplace([] () { std::cout << "7\n"; });
19+
auto H = taskflow.emplace([] () { std::cout << "8\n"; });
2220

2321
A.name("A");
2422
B.name("B");

examples/reduce.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,15 @@ int main(int argc, char* argv[]) {
9797
std::cerr << "usage: ./reduce [reduce|transform_reduce]" << std::endl;
9898
std::exit(EXIT_FAILURE);
9999
}
100-
101-
if(std::string_view method(argv[1]); method == "reduce") {
100+
101+
if(std::strcmp(argv[1], "reduce") == 0) {
102102
reduce();
103103
}
104-
else if(method == "transform_reduce") {
104+
else if(std::strcmp(argv[1], "transform_reduce")) {
105105
transform_reduce();
106106
}
107107
else {
108-
std::cerr << "invalid method " << method.data() << std::endl;
108+
std::cerr << "invalid method " << argv[1] << std::endl;
109109
std::exit(EXIT_FAILURE);
110110
}
111111

examples/simple.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ int main(){
1515
auto C = taskflow.emplace([]() { std::cout << "TaskC\n"; });
1616
auto D = taskflow.emplace([]() { std::cout << "TaskD\n"; });
1717

18-
//
19-
A.precede(B); // B runs after A // +---+
20-
A.precede(C); // C runs after A // +---->| B |-----+
21-
B.precede(D); // D runs after B // | +---+ |
22-
C.precede(D); // D runs after C // +---+ +-v-+
23-
// | A | | D |
24-
// +---+ +-^-+
25-
executor.run(taskflow).wait(); // | +---+ |
26-
// +---->| C |-----+
27-
return 0; // +---+
18+
//
19+
A.precede(B); // B runs after A // +---+
20+
A.precede(C); // C runs after A // +---->| B |-----+
21+
B.precede(D); // D runs after B // | +---+ |
22+
C.precede(D); // D runs after C // +---+ +-v-+
23+
// | A | | D |
24+
// +---+ +-^-+
25+
executor.run(taskflow).wait(); // | +---+ |
26+
// +---->| C |-----+
27+
return 0; // +---+
2828
}
2929

3030

examples/subflow.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ int main(int argc, char* argv[]) {
2424
std::exit(EXIT_FAILURE);
2525
}
2626

27-
std::string_view opt(argv[1]);
27+
std::string opt(argv[1]);
2828

2929
if(opt != "detach" && opt != "join") {
3030
std::cerr << usage << std::endl;
@@ -37,9 +37,9 @@ int main(int argc, char* argv[]) {
3737
tf::Executor executor(4);
3838
tf::Taskflow taskflow("Dynamic Tasking Demo");
3939

40-
auto [A, B, C, D] = taskflow.emplace(
41-
// Task A
42-
[] () { std::cout << "TaskA\n"; },
40+
// Task A
41+
auto A = taskflow.emplace([] () { std::cout << "TaskA\n"; });
42+
auto B = taskflow.emplace(
4343
// Task B
4444
[cap=std::vector<int>{1,2,3,4,5,6,7,8}, detached] (tf::Subflow& subflow) {
4545
std::cout << "TaskB is spawning B1, B2, and B3 ...\n";
@@ -64,13 +64,11 @@ int main(int argc, char* argv[]) {
6464

6565
// detach or join the subflow (by default the subflow join at B)
6666
if(detached) subflow.detach();
67-
},
68-
// Task C
69-
[] () { std::cout << "TaskC\n"; },
70-
// Task D
71-
[] () { std::cout << "TaskD\n"; }
72-
);
73-
67+
}
68+
);
69+
70+
auto C = taskflow.emplace([] () { std::cout << "TaskC\n"; });
71+
auto D = taskflow.emplace([] () { std::cout << "TaskD\n"; });
7472
A.name("A");
7573
B.name("B");
7674
C.name("C");

examples/visualization.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ int main(){
1010
// ------------------------------------------------------
1111
// Static Tasking
1212
// ------------------------------------------------------
13-
auto [A, B, C, D, E] = tf.emplace(
14-
[] () { std::cout << "Task A" << std::endl; },
15-
[] () { std::cout << "Task B" << std::endl; },
16-
[] () { std::cout << "Task C" << std::endl; },
17-
[] () { std::cout << "Task D" << std::endl; },
18-
[] () { std::cout << "Task E" << std::endl; }
19-
);
13+
auto A = tf.emplace([] () { std::cout << "Task A" << std::endl; });
14+
auto B = tf.emplace([] () { std::cout << "Task B" << std::endl; });
15+
auto C = tf.emplace([] () { std::cout << "Task C" << std::endl; });
16+
auto D = tf.emplace([] () { std::cout << "Task D" << std::endl; });
17+
auto E = tf.emplace([] () { std::cout << "Task E" << std::endl; });
2018

2119
A.precede(B, C, E);
2220
C.precede(D);

0 commit comments

Comments
 (0)