]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/thread/example/future_then.cpp
update sources to v12.2.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 #include <iostream>
21 #if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
22
23 #ifdef BOOST_MSVC
24 #pragma warning(disable: 4127) // conditional expression is constant
25 #endif
26
27 int p1()
28 {
29 BOOST_THREAD_LOG << "P1" << BOOST_THREAD_END_LOG;
30 return 123;
31 }
32
33 int p2(boost::future<int> f)
34 {
35 BOOST_THREAD_LOG << "P2<" << BOOST_THREAD_END_LOG;
36 try
37 {
38 return 2 * f.get();
39 }
40 catch (std::exception& ex)
41 {
42 std::cout << "ERRORRRRR "<<ex.what() << "" << std::endl;
43 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
44 BOOST_ASSERT(false);
45 }
46 catch (...)
47 {
48 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
49 BOOST_ASSERT(false);
50 }
51 BOOST_THREAD_LOG << "P2>" << BOOST_THREAD_END_LOG;
52 return 0;
53 }
54 int p2s(boost::shared_future<int> f)
55 {
56 BOOST_THREAD_LOG << "<P2S" << BOOST_THREAD_END_LOG;
57 try
58 {
59 return 2 * f.get();
60 }
61 catch (std::exception& ex)
62 {
63 std::cout << "ERRORRRRR "<<ex.what() << "" << std::endl;
64 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
65 BOOST_ASSERT(false);
66 }
67 catch (...)
68 {
69 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
70 BOOST_ASSERT(false);
71 }
72 BOOST_THREAD_LOG << "P2S>" << BOOST_THREAD_END_LOG;
73 return 0;
74 }
75
76 int main()
77 {
78 const int number_of_tests = 100;
79 BOOST_THREAD_LOG << "<MAIN" << BOOST_THREAD_END_LOG;
80 {
81 for (int i=0; i< number_of_tests; i++)
82 try
83 {
84 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
85 boost::future<int> f1 = boost::async(&p1);
86 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
87 boost::future<int> f2 = f1.then(&p2);
88 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
89 (void)f2.get();
90 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
91 }
92 catch (std::exception& ex)
93 {
94 std::cout << "ERRORRRRR "<<ex.what() << "" << std::endl;
95 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
96 return 1;
97 }
98 catch (...)
99 {
100 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
101 return 2;
102 }
103 }
104 {
105 for (int i=0; i< number_of_tests; i++)
106 try
107 {
108 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
109 boost::shared_future<int> f1 = boost::async(&p1).share();
110 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
111 boost::future<int> f2 = f1.then(&p2s);
112 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
113 (void)f2.get();
114 BOOST_THREAD_LOG << "" << BOOST_THREAD_END_LOG;
115 }
116 catch (std::exception& ex)
117 {
118 std::cout << "ERRORRRRR "<<ex.what() << "" << std::endl;
119 BOOST_THREAD_LOG << "ERRORRRRR "<<ex.what() << "" << BOOST_THREAD_END_LOG;
120 return 1;
121 }
122 catch (...)
123 {
124 BOOST_THREAD_LOG << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
125 return 2;
126 }
127 }
128 BOOST_THREAD_LOG << "MAIN>" << BOOST_THREAD_END_LOG;
129 return 0;
130 }
131 #else
132
133 int main()
134 {
135 return 0;
136 }
137 #endif