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