diff options
Diffstat (limited to 'boost/coroutine/detail/setup.hpp')
-rw-r--r-- | boost/coroutine/detail/setup.hpp | 75 |
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 |