]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/thread/example/future_then.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / thread / example / future_then.cpp
1 // Copyright (C) 2012-2013 Vicente Botet
2 //
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 #include <boost/config.hpp>
7 #if ! defined BOOST_NO_CXX11_DECLTYPE
8 #define BOOST_RESULT_OF_USE_DECLTYPE
9 #endif
10
11
12 #define BOOST_THREAD_VERSION 4
13 //#define BOOST_THREAD_USES_LOG
14 #define BOOST_THREAD_USES_LOG_THREAD_ID
15
16 #include <boost/thread/detail/log.hpp>
17 #include <boost/thread/future.hpp>
18 #include <boost/assert.hpp>
19 #include <string>
20 #if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
21
22 int p1()
23 {
24 BOOST_THREAD_LOG << "P1" << BOOST_THREAD_END_LOG;
25 return 123;
26 }
27
28 int p2(boost::future<int> f)
29 {
30 BOOST_THREAD_LOG << "P2<" << BOOST_THREAD_END_LOG;
31 try
32 {
33 return 2 * f.get();
34 }
35 catch (std::exception& ex)
36 {
37 std::cout << "ERRORRRRR "<<ex.what() << "" << std::endl;
38 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
39 BOOST_ASSERT(false);
40 }
41 catch (...)
42 {
43 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
44 BOOST_ASSERT(false);
45 }
46 BOOST_THREAD_LOG << "P2>" << BOOST_THREAD_END_LOG;
47 return 0;
48 }
49 int p2s(boost::shared_future<int> f)
50 {
51 BOOST_THREAD_LOG << "<P2S" << BOOST_THREAD_END_LOG;
52 try
53 {
54 return 2 * f.get();
55 }
56 catch (std::exception& ex)
57 {
58 std::cout << "ERRORRRRR "<<ex.what() << "" << std::endl;
59 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
60 BOOST_ASSERT(false);
61 }
62 catch (...)
63 {
64 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
65 BOOST_ASSERT(false);
66 }
67 BOOST_THREAD_LOG << "P2S>" << BOOST_THREAD_END_LOG;
68 return 0;
69 }
70
71 int main()
72 {
73 const int number_of_tests = 100;
74 BOOST_THREAD_LOG << "<MAIN" << BOOST_THREAD_END_LOG;
75 {
76 for (int i=0; i< number_of_tests; i++)
77 try
78 {
79 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
80 boost::future<int> f1 = boost::async(&p1);
81 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
82 boost::future<int> f2 = f1.then(&p2);
83 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
84 (void)f2.get();
85 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
86 }
87 catch (std::exception& ex)
88 {
89 std::cout << "ERRORRRRR "<<ex.what() << "" << std::endl;
90 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
91 return 1;
92 }
93 catch (...)
94 {
95 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
96 return 2;
97 }
98 }
99 {
100 for (int i=0; i< number_of_tests; i++)
101 try
102 {
103 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
104 boost::shared_future<int> f1 = boost::async(&p1).share();
105 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
106 boost::future<int> f2 = f1.then(&p2s);
107 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
108 (void)f2.get();
109 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
110 }
111 catch (std::exception& ex)
112 {
113 std::cout << "ERRORRRRR "<<ex.what() << "" << std::endl;
114 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
115 return 1;
116 }
117 catch (...)
118 {
119 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
120 return 2;
121 }
122 }
123 BOOST_THREAD_LOG << "MAIN>" << BOOST_THREAD_END_LOG;
124 return 0;
125 }
126 #else
127
128 int main()
129 {
130 return 0;
131 }
132 #endif