Chris@102
|
1
|
Chris@102
|
2 // Copyright Oliver Kowalke 2009.
|
Chris@102
|
3 // Distributed under the Boost Software License, Version 1.0.
|
Chris@102
|
4 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@102
|
5 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@102
|
6
|
Chris@102
|
7 #ifndef BOOST_COROUTINES_DETAIL_PARAMETERS_H
|
Chris@102
|
8 #define BOOST_COROUTINES_DETAIL_PARAMETERS_H
|
Chris@102
|
9
|
Chris@102
|
10 #include <boost/assert.hpp>
|
Chris@102
|
11 #include <boost/config.hpp>
|
Chris@102
|
12
|
Chris@102
|
13 #include <boost/coroutine/detail/flags.hpp>
|
Chris@102
|
14
|
Chris@102
|
15 #ifdef BOOST_HAS_ABI_HEADERS
|
Chris@102
|
16 # include BOOST_ABI_PREFIX
|
Chris@102
|
17 #endif
|
Chris@102
|
18
|
Chris@102
|
19 namespace boost {
|
Chris@102
|
20 namespace coroutines {
|
Chris@102
|
21 namespace detail {
|
Chris@102
|
22
|
Chris@102
|
23 template< typename Data >
|
Chris@102
|
24 struct parameters
|
Chris@102
|
25 {
|
Chris@102
|
26 Data * data;
|
Chris@102
|
27 bool do_unwind;
|
Chris@102
|
28 void * coro;
|
Chris@102
|
29
|
Chris@102
|
30 parameters() :
|
Chris@102
|
31 data( 0), do_unwind( false), coro( 0)
|
Chris@102
|
32 {}
|
Chris@102
|
33
|
Chris@102
|
34 explicit parameters( void * coro_) :
|
Chris@102
|
35 data( 0), do_unwind( false), coro( coro_)
|
Chris@102
|
36 { BOOST_ASSERT( 0 != coro); }
|
Chris@102
|
37
|
Chris@102
|
38 explicit parameters( Data * data_, void * coro_) :
|
Chris@102
|
39 data( data_), do_unwind( false), coro( coro_)
|
Chris@102
|
40 {
|
Chris@102
|
41 BOOST_ASSERT( 0 != data);
|
Chris@102
|
42 BOOST_ASSERT( 0 != coro);
|
Chris@102
|
43 }
|
Chris@102
|
44
|
Chris@102
|
45 explicit parameters( unwind_t::flag_t) :
|
Chris@102
|
46 data( 0), do_unwind( true)
|
Chris@102
|
47 {}
|
Chris@102
|
48 };
|
Chris@102
|
49
|
Chris@102
|
50 template< typename Data >
|
Chris@102
|
51 struct parameters< Data & >
|
Chris@102
|
52 {
|
Chris@102
|
53 Data * data;
|
Chris@102
|
54 bool do_unwind;
|
Chris@102
|
55 void * coro;
|
Chris@102
|
56
|
Chris@102
|
57 parameters() :
|
Chris@102
|
58 data( 0), do_unwind( false), coro( 0)
|
Chris@102
|
59 {}
|
Chris@102
|
60
|
Chris@102
|
61 explicit parameters( void * coro_) :
|
Chris@102
|
62 data( 0), do_unwind( false), coro( coro_)
|
Chris@102
|
63 { BOOST_ASSERT( 0 != coro); }
|
Chris@102
|
64
|
Chris@102
|
65 explicit parameters( Data * data_, void * coro_) :
|
Chris@102
|
66 data( data_), do_unwind( false), coro( coro_)
|
Chris@102
|
67 {
|
Chris@102
|
68 BOOST_ASSERT( 0 != data);
|
Chris@102
|
69 BOOST_ASSERT( 0 != coro);
|
Chris@102
|
70 }
|
Chris@102
|
71
|
Chris@102
|
72 explicit parameters( unwind_t::flag_t) :
|
Chris@102
|
73 data( 0), do_unwind( true), coro( 0)
|
Chris@102
|
74 {}
|
Chris@102
|
75 };
|
Chris@102
|
76
|
Chris@102
|
77 template<>
|
Chris@102
|
78 struct parameters< void >
|
Chris@102
|
79 {
|
Chris@102
|
80 bool do_unwind;
|
Chris@102
|
81 void * coro;
|
Chris@102
|
82
|
Chris@102
|
83 parameters() :
|
Chris@102
|
84 do_unwind( false), coro(0)
|
Chris@102
|
85 {}
|
Chris@102
|
86
|
Chris@102
|
87 parameters( void * coro_) :
|
Chris@102
|
88 do_unwind( false), coro( coro_)
|
Chris@102
|
89 { BOOST_ASSERT( 0 != coro); }
|
Chris@102
|
90
|
Chris@102
|
91 explicit parameters( unwind_t::flag_t) :
|
Chris@102
|
92 do_unwind( true), coro( 0)
|
Chris@102
|
93 {}
|
Chris@102
|
94 };
|
Chris@102
|
95
|
Chris@102
|
96 }}}
|
Chris@102
|
97
|
Chris@102
|
98 #ifdef BOOST_HAS_ABI_HEADERS
|
Chris@102
|
99 # include BOOST_ABI_SUFFIX
|
Chris@102
|
100 #endif
|
Chris@102
|
101
|
Chris@102
|
102 #endif // BOOST_COROUTINES_DETAIL_PARAMETERS_H
|