Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:30:31

0001 
0002 //          Copyright Oliver Kowalke 2009.
0003 // Distributed under the Boost Software License, Version 1.0.
0004 //    (See accompanying file LICENSE_1_0.txt or copy at
0005 //          http://www.boost.org/LICENSE_1_0.txt)
0006 
0007 #ifndef BOOST_COROUTINES_DETAIL_PARAMETERS_H
0008 #define BOOST_COROUTINES_DETAIL_PARAMETERS_H
0009 
0010 #include <boost/assert.hpp>
0011 #include <boost/config.hpp>
0012 
0013 #include <boost/coroutine/detail/flags.hpp>
0014 
0015 #ifdef BOOST_HAS_ABI_HEADERS
0016 #  include BOOST_ABI_PREFIX
0017 #endif
0018 
0019 namespace boost {
0020 namespace coroutines {
0021 namespace detail {
0022 
0023 template< typename Data >
0024 struct parameters
0025 {
0026     Data                *   data;
0027     bool                    do_unwind;
0028     void                *   coro;
0029 
0030     parameters() :
0031         data( 0), do_unwind( false), coro( 0)
0032     {}
0033 
0034     explicit parameters( void * coro_) :
0035         data( 0), do_unwind( false), coro( coro_)
0036     { BOOST_ASSERT( 0 != coro); }
0037 
0038     explicit parameters( Data * data_, void * coro_) :
0039         data( data_), do_unwind( false), coro( coro_)
0040     {
0041         BOOST_ASSERT( 0 != data);
0042         BOOST_ASSERT( 0 != coro);
0043     }
0044 
0045     explicit parameters( unwind_t::flag_t) :
0046         data( 0), do_unwind( true)
0047     {}
0048 };
0049 
0050 template< typename Data >
0051 struct parameters< Data & >
0052 {
0053     Data                *   data;
0054     bool                    do_unwind;
0055     void                *   coro;
0056 
0057     parameters() :
0058         data( 0), do_unwind( false), coro( 0)
0059     {}
0060 
0061     explicit parameters( void * coro_) :
0062         data( 0), do_unwind( false), coro( coro_)
0063     { BOOST_ASSERT( 0 != coro); }
0064 
0065     explicit parameters( Data * data_, void * coro_) :
0066         data( data_), do_unwind( false), coro( coro_)
0067     {
0068         BOOST_ASSERT( 0 != data);
0069         BOOST_ASSERT( 0 != coro);
0070     }
0071 
0072     explicit parameters( unwind_t::flag_t) :
0073         data( 0), do_unwind( true), coro( 0)
0074     {}
0075 };
0076 
0077 template<>
0078 struct parameters< void >
0079 {
0080     bool                    do_unwind;
0081     void                *   coro;
0082 
0083     parameters() :
0084         do_unwind( false), coro(0)
0085     {}
0086 
0087     parameters( void * coro_) :
0088         do_unwind( false), coro( coro_)
0089     { BOOST_ASSERT( 0 != coro); }
0090 
0091     explicit parameters( unwind_t::flag_t) :
0092         do_unwind( true), coro( 0)
0093     {}
0094 };
0095 
0096 }}}
0097 
0098 #ifdef BOOST_HAS_ABI_HEADERS
0099 #  include BOOST_ABI_SUFFIX
0100 #endif
0101 
0102 #endif // BOOST_COROUTINES_DETAIL_PARAMETERS_H