parameters.hpp 2.3 KB

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