summaryrefslogtreecommitdiff
path: root/boost/coroutine/detail/parameters.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/coroutine/detail/parameters.hpp')
-rw-r--r--boost/coroutine/detail/parameters.hpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/boost/coroutine/detail/parameters.hpp b/boost/coroutine/detail/parameters.hpp
new file mode 100644
index 0000000000..8bad3910a9
--- /dev/null
+++ b/boost/coroutine/detail/parameters.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Oliver Kowalke 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_COROUTINES_DETAIL_PARAMETERS_H
+#define BOOST_COROUTINES_DETAIL_PARAMETERS_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+
+#include <boost/coroutine/detail/flags.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace coroutines {
+namespace detail {
+
+template< typename Data >
+struct parameters
+{
+ Data * data;
+ bool do_unwind;
+ void * coro;
+
+ parameters() :
+ data( 0), do_unwind( false), coro( 0)
+ {}
+
+ explicit parameters( void * coro_) :
+ data( 0), do_unwind( false), coro( coro_)
+ { BOOST_ASSERT( 0 != coro); }
+
+ explicit parameters( Data * data_, void * coro_) :
+ data( data_), do_unwind( false), coro( coro_)
+ {
+ BOOST_ASSERT( 0 != data);
+ BOOST_ASSERT( 0 != coro);
+ }
+
+ explicit parameters( unwind_t::flag_t) :
+ data( 0), do_unwind( true)
+ {}
+};
+
+template< typename Data >
+struct parameters< Data & >
+{
+ Data * data;
+ bool do_unwind;
+ void * coro;
+
+ parameters() :
+ data( 0), do_unwind( false), coro( 0)
+ {}
+
+ explicit parameters( void * coro_) :
+ data( 0), do_unwind( false), coro( coro_)
+ { BOOST_ASSERT( 0 != coro); }
+
+ explicit parameters( Data * data_, void * coro_) :
+ data( data_), do_unwind( false), coro( coro_)
+ {
+ BOOST_ASSERT( 0 != data);
+ BOOST_ASSERT( 0 != coro);
+ }
+
+ explicit parameters( unwind_t::flag_t) :
+ data( 0), do_unwind( true), coro( 0)
+ {}
+};
+
+template<>
+struct parameters< void >
+{
+ bool do_unwind;
+ void * coro;
+
+ parameters() :
+ do_unwind( false), coro(0)
+ {}
+
+ parameters( void * coro_) :
+ do_unwind( false), coro( coro_)
+ { BOOST_ASSERT( 0 != coro); }
+
+ explicit parameters( unwind_t::flag_t) :
+ do_unwind( true), coro( 0)
+ {}
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_PARAMETERS_H