summaryrefslogtreecommitdiff
path: root/boost/coroutine/detail/setup.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/coroutine/detail/setup.hpp')
-rw-r--r--boost/coroutine/detail/setup.hpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/boost/coroutine/detail/setup.hpp b/boost/coroutine/detail/setup.hpp
new file mode 100644
index 0000000000..35f601a779
--- /dev/null
+++ b/boost/coroutine/detail/setup.hpp
@@ -0,0 +1,75 @@
+
+// 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_SETUP_H
+#define BOOST_COROUTINES_DETAIL_SETUP_H
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/move/move.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/coroutine/attributes.hpp>
+#include <boost/coroutine/detail/coroutine_context.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 Fn >
+struct setup
+{
+ struct dummy {};
+
+ Fn fn;
+ coroutine_context * caller;
+ coroutine_context * callee;
+ attributes attr;
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ setup( Fn fn_,
+ coroutine_context * caller_,
+ coroutine_context * callee_,
+ attributes const& attr_) :
+ fn( boost::forward< Fn >( fn_) ),
+ caller( caller_),
+ callee( callee_),
+ attr( attr_)
+ {}
+#endif
+ setup( BOOST_RV_REF( Fn) fn_,
+ coroutine_context * caller_,
+ coroutine_context * callee_,
+ attributes const& attr_,
+ typename disable_if<
+ is_same< typename decay< Fn >::type, setup >,
+ dummy*
+ >::type = 0) :
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ fn( fn_),
+#else
+ fn( boost::forward< Fn >( fn_) ),
+#endif
+ caller( caller_),
+ callee( callee_),
+ attr( attr_)
+ {}
+};
+
+}}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_COROUTINES_DETAIL_SETUP_H