123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // 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
|