diff --git a/include/boost/coroutine2/detail/create_control_block.ipp b/include/boost/coroutine2/detail/create_control_block.ipp index 9eaea2e..127ea84 100644 --- a/include/boost/coroutine2/detail/create_control_block.ipp +++ b/include/boost/coroutine2/detail/create_control_block.ipp @@ -28,7 +28,7 @@ namespace coroutines2 { namespace detail { template< typename ControlBlock, typename StackAllocator, typename Fn > -ControlBlock * create_control_block( StackAllocator salloc, Fn && fn) { +ControlBlock * create_control_block( StackAllocator && salloc, Fn && fn) { auto sctx = salloc.allocate(); // reserve space for control structure #if defined(BOOST_NO_CXX11_CONSTEXPR) || defined(BOOST_NO_CXX11_STD_ALIGN) @@ -48,7 +48,7 @@ ControlBlock * create_control_block( StackAllocator salloc, Fn && fn) { #endif // placment new for control structure on coroutine stack return new ( sp) ControlBlock{ context::preallocated( sp, size, sctx), - salloc, std::forward< Fn >( fn) }; + std::forward< StackAllocator >( salloc), std::forward< Fn >( fn) }; } }}} diff --git a/include/boost/coroutine2/detail/pull_control_block_cc.hpp b/include/boost/coroutine2/detail/pull_control_block_cc.hpp index 5353fb8..b9ac614 100644 --- a/include/boost/coroutine2/detail/pull_control_block_cc.hpp +++ b/include/boost/coroutine2/detail/pull_control_block_cc.hpp @@ -35,7 +35,7 @@ struct pull_coroutine< T >::control_block { static void destroy( control_block * cb) noexcept; template< typename StackAllocator, typename Fn > - control_block( context::preallocated, StackAllocator, Fn &&); + control_block( context::preallocated, StackAllocator &&, Fn &&); control_block( typename push_coroutine< T >::control_block *, boost::context::continuation &) noexcept; @@ -76,7 +76,7 @@ struct pull_coroutine< T & >::control_block { static void destroy( control_block * cb) noexcept; template< typename StackAllocator, typename Fn > - control_block( context::preallocated, StackAllocator, Fn &&); + control_block( context::preallocated, StackAllocator &&, Fn &&); control_block( typename push_coroutine< T & >::control_block *, boost::context::continuation &) noexcept; @@ -103,7 +103,7 @@ struct pull_coroutine< void >::control_block { static void destroy( control_block * cb) noexcept; template< typename StackAllocator, typename Fn > - control_block( context::preallocated, StackAllocator, Fn &&); + control_block( context::preallocated, StackAllocator &&, Fn &&); control_block( push_coroutine< void >::control_block *, boost::context::continuation &) noexcept; diff --git a/include/boost/coroutine2/detail/pull_control_block_cc.ipp b/include/boost/coroutine2/detail/pull_control_block_cc.ipp index a7dd68e..43fdb76 100644 --- a/include/boost/coroutine2/detail/pull_control_block_cc.ipp +++ b/include/boost/coroutine2/detail/pull_control_block_cc.ipp @@ -43,7 +43,7 @@ pull_coroutine< T >::control_block::destroy( control_block * cb) noexcept { template< typename T > template< typename StackAllocator, typename Fn > -pull_coroutine< T >::control_block::control_block( context::preallocated palloc, StackAllocator salloc, +pull_coroutine< T >::control_block::control_block( context::preallocated palloc, StackAllocator && salloc, Fn && fn) : c{}, other{ nullptr }, @@ -53,7 +53,7 @@ pull_coroutine< T >::control_block::control_block( context::preallocated palloc, storage{} { #if defined(BOOST_NO_CXX14_GENERIC_LAMBDAS) c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), wrap( [this](typename std::decay< Fn >::type & fn_,boost::context::continuation && c) mutable { // create synthesized push_coroutine< T > typename push_coroutine< T >::control_block synthesized_cb{ this, c }; @@ -79,7 +79,7 @@ pull_coroutine< T >::control_block::control_block( context::preallocated palloc, std::forward< Fn >( fn) ) ); #else c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), [this,fn_=std::forward< Fn >( fn)](boost::context::continuation && c) mutable { // create synthesized push_coroutine< T > typename push_coroutine< T >::control_block synthesized_cb{ this, c }; @@ -193,7 +193,7 @@ pull_coroutine< T & >::control_block::destroy( control_block * cb) noexcept { template< typename T > template< typename StackAllocator, typename Fn > -pull_coroutine< T & >::control_block::control_block( context::preallocated palloc, StackAllocator salloc, +pull_coroutine< T & >::control_block::control_block( context::preallocated palloc, StackAllocator && salloc, Fn && fn) : c{}, other{ nullptr }, @@ -203,7 +203,7 @@ pull_coroutine< T & >::control_block::control_block( context::preallocated pallo storage{} { #if defined(BOOST_NO_CXX14_GENERIC_LAMBDAS) c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), wrap( [this](typename std::decay< Fn >::type & fn_,boost::context::continuation && c) mutable { // create synthesized push_coroutine< T & > typename push_coroutine< T & >::control_block synthesized_cb{ this, c }; @@ -229,7 +229,7 @@ pull_coroutine< T & >::control_block::control_block( context::preallocated pallo std::forward< Fn >( fn) ) ); #else c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), [this,fn_=std::forward< Fn >( fn)](boost::context::continuation && c) mutable { // create synthesized push_coroutine< T & > typename push_coroutine< T & >::control_block synthesized_cb{ this, c }; @@ -319,7 +319,7 @@ pull_coroutine< void >::control_block::destroy( control_block * cb) noexcept { } template< typename StackAllocator, typename Fn > -pull_coroutine< void >::control_block::control_block( context::preallocated palloc, StackAllocator salloc, +pull_coroutine< void >::control_block::control_block( context::preallocated palloc, StackAllocator && salloc, Fn && fn) : c{}, other{ nullptr }, @@ -327,7 +327,7 @@ pull_coroutine< void >::control_block::control_block( context::preallocated pall except{} { #if defined(BOOST_NO_CXX14_GENERIC_LAMBDAS) c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), wrap( [this](typename std::decay< Fn >::type & fn_,boost::context::continuation && c) mutable { // create synthesized push_coroutine< void > typename push_coroutine< void >::control_block synthesized_cb{ this, c }; @@ -353,7 +353,7 @@ pull_coroutine< void >::control_block::control_block( context::preallocated pall std::forward< Fn >( fn) ) ); #else c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), [this,fn_=std::forward< Fn >( fn)]( boost::context::continuation && c) mutable { // create synthesized push_coroutine< void > typename push_coroutine< void >::control_block synthesized_cb{ this, c }; diff --git a/include/boost/coroutine2/detail/pull_coroutine.hpp b/include/boost/coroutine2/detail/pull_coroutine.hpp index f4c4073..32cd68e 100644 --- a/include/boost/coroutine2/detail/pull_coroutine.hpp +++ b/include/boost/coroutine2/detail/pull_coroutine.hpp @@ -45,7 +45,7 @@ public: explicit pull_coroutine( Fn &&); template< typename StackAllocator, typename Fn > - pull_coroutine( StackAllocator, Fn &&); + pull_coroutine( StackAllocator &&, Fn &&); ~pull_coroutine(); @@ -157,7 +157,7 @@ public: explicit pull_coroutine( Fn &&); template< typename StackAllocator, typename Fn > - pull_coroutine( StackAllocator, Fn &&); + pull_coroutine( StackAllocator &&, Fn &&); ~pull_coroutine(); @@ -267,7 +267,7 @@ public: explicit pull_coroutine( Fn &&); template< typename StackAllocator, typename Fn > - pull_coroutine( StackAllocator, Fn &&); + pull_coroutine( StackAllocator &&, Fn &&); ~pull_coroutine(); diff --git a/include/boost/coroutine2/detail/pull_coroutine.ipp b/include/boost/coroutine2/detail/pull_coroutine.ipp index 9a81893..699d5ab 100644 --- a/include/boost/coroutine2/detail/pull_coroutine.ipp +++ b/include/boost/coroutine2/detail/pull_coroutine.ipp @@ -50,8 +50,8 @@ pull_coroutine< T >::pull_coroutine( Fn && fn) : template< typename T > template< typename StackAllocator, typename Fn > -pull_coroutine< T >::pull_coroutine( StackAllocator salloc, Fn && fn) : - cb_{ create_control_block< control_block >( salloc, std::forward< Fn >( fn) ) } { +pull_coroutine< T >::pull_coroutine( StackAllocator && salloc, Fn && fn) : + cb_{ create_control_block< control_block >( std::forward< StackAllocator >( salloc), std::forward< Fn >( fn) ) } { if ( ! cb_->valid() ) { cb_->deallocate(); cb_ = nullptr; @@ -119,8 +119,8 @@ pull_coroutine< T & >::pull_coroutine( Fn && fn) : template< typename T > template< typename StackAllocator, typename Fn > -pull_coroutine< T & >::pull_coroutine( StackAllocator salloc, Fn && fn) : - cb_{ create_control_block< control_block >( salloc, std::forward< Fn >( fn) ) } { +pull_coroutine< T & >::pull_coroutine( StackAllocator && salloc, Fn && fn) : + cb_{ create_control_block< control_block >( std::forward< StackAllocator >( salloc), std::forward< Fn >( fn) ) } { if ( ! cb_->valid() ) { cb_->deallocate(); cb_ = nullptr; @@ -180,8 +180,8 @@ pull_coroutine< void >::pull_coroutine( Fn && fn) : } template< typename StackAllocator, typename Fn > -pull_coroutine< void >::pull_coroutine( StackAllocator salloc, Fn && fn) : - cb_{ create_control_block< control_block >( salloc, std::forward< Fn >( fn) ) } { +pull_coroutine< void >::pull_coroutine( StackAllocator && salloc, Fn && fn) : + cb_{ create_control_block< control_block >( std::forward< StackAllocator >( salloc), std::forward< Fn >( fn) ) } { if ( ! cb_->valid() ) { cb_->deallocate(); cb_ = nullptr; diff --git a/include/boost/coroutine2/detail/push_control_block_cc.hpp b/include/boost/coroutine2/detail/push_control_block_cc.hpp index d01c98f..8dda44f 100644 --- a/include/boost/coroutine2/detail/push_control_block_cc.hpp +++ b/include/boost/coroutine2/detail/push_control_block_cc.hpp @@ -32,7 +32,7 @@ struct push_coroutine< T >::control_block { static void destroy( control_block * cb) noexcept; template< typename StackAllocator, typename Fn > - control_block( context::preallocated, StackAllocator, Fn &&); + control_block( context::preallocated, StackAllocator &&, Fn &&); control_block( typename pull_coroutine< T >::control_block *, boost::context::continuation &) noexcept; @@ -58,7 +58,7 @@ struct push_coroutine< T & >::control_block { static void destroy( control_block * cb) noexcept; template< typename StackAllocator, typename Fn > - control_block( context::preallocated, StackAllocator, Fn &&); + control_block( context::preallocated, StackAllocator &&, Fn &&); control_block( typename pull_coroutine< T & >::control_block *, boost::context::continuation &) noexcept; @@ -81,7 +81,7 @@ struct push_coroutine< void >::control_block { static void destroy( control_block * cb) noexcept; template< typename StackAllocator, typename Fn > - control_block( context::preallocated, StackAllocator, Fn &&); + control_block( context::preallocated, StackAllocator &&, Fn &&); control_block( pull_coroutine< void >::control_block *, boost::context::continuation &) noexcept; diff --git a/include/boost/coroutine2/detail/push_control_block_cc.ipp b/include/boost/coroutine2/detail/push_control_block_cc.ipp index 98b24f2..ae7dee1 100644 --- a/include/boost/coroutine2/detail/push_control_block_cc.ipp +++ b/include/boost/coroutine2/detail/push_control_block_cc.ipp @@ -42,7 +42,7 @@ push_coroutine< T >::control_block::destroy( control_block * cb) noexcept { template< typename T > template< typename StackAllocator, typename Fn > -push_coroutine< T >::control_block::control_block( context::preallocated palloc, StackAllocator salloc, +push_coroutine< T >::control_block::control_block( context::preallocated palloc, StackAllocator && salloc, Fn && fn) : c{}, other{ nullptr }, @@ -50,7 +50,7 @@ push_coroutine< T >::control_block::control_block( context::preallocated palloc, except{} { #if defined(BOOST_NO_CXX14_GENERIC_LAMBDAS) c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), wrap( [this](typename std::decay< Fn >::type & fn_,boost::context::continuation && c) mutable { // create synthesized pull_coroutine< T > typename pull_coroutine< T >::control_block synthesized_cb{ this, c }; @@ -77,7 +77,7 @@ push_coroutine< T >::control_block::control_block( context::preallocated palloc, std::forward< Fn >( fn) ) ); #else c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), [this,fn_=std::forward< Fn >( fn)](boost::context::continuation && c) mutable { // create synthesized pull_coroutine< T > typename pull_coroutine< T >::control_block synthesized_cb{ this, c }; @@ -166,7 +166,7 @@ push_coroutine< T & >::control_block::destroy( control_block * cb) noexcept { template< typename T > template< typename StackAllocator, typename Fn > -push_coroutine< T & >::control_block::control_block( context::preallocated palloc, StackAllocator salloc, +push_coroutine< T & >::control_block::control_block( context::preallocated palloc, StackAllocator && salloc, Fn && fn) : c{}, other{ nullptr }, @@ -174,7 +174,7 @@ push_coroutine< T & >::control_block::control_block( context::preallocated pallo except{} { #if defined(BOOST_NO_CXX14_GENERIC_LAMBDAS) c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), wrap( [this](typename std::decay< Fn >::type & fn_,boost::context::continuation && c) mutable { // create synthesized pull_coroutine< T & > typename pull_coroutine< T & >::control_block synthesized_cb{ this, c }; @@ -201,7 +201,7 @@ push_coroutine< T & >::control_block::control_block( context::preallocated pallo std::forward< Fn >( fn) ) ); #else c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), [this,fn_=std::forward< Fn >( fn)](boost::context::continuation && c) mutable { // create synthesized pull_coroutine< T & > typename pull_coroutine< T & >::control_block synthesized_cb{ this, c }; @@ -277,14 +277,14 @@ push_coroutine< void >::control_block::destroy( control_block * cb) noexcept { } template< typename StackAllocator, typename Fn > -push_coroutine< void >::control_block::control_block( context::preallocated palloc, StackAllocator salloc, Fn && fn) : +push_coroutine< void >::control_block::control_block( context::preallocated palloc, StackAllocator && salloc, Fn && fn) : c{}, other{ nullptr }, state{ state_t::unwind }, except{} { #if defined(BOOST_NO_CXX14_GENERIC_LAMBDAS) c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), wrap( [this](typename std::decay< Fn >::type & fn_,boost::context::continuation && c) mutable { // create synthesized pull_coroutine< void > typename pull_coroutine< void >::control_block synthesized_cb{ this, c }; @@ -311,7 +311,7 @@ push_coroutine< void >::control_block::control_block( context::preallocated pall std::forward< Fn >( fn) ) ); #else c = boost::context::callcc( - std::allocator_arg, palloc, salloc, + std::allocator_arg, palloc, std::forward< StackAllocator >( salloc), [this,fn_=std::forward< Fn >( fn)](boost::context::continuation && c) mutable { // create synthesized pull_coroutine< void > typename pull_coroutine< void >::control_block synthesized_cb{ this, c}; diff --git a/include/boost/coroutine2/detail/push_coroutine.hpp b/include/boost/coroutine2/detail/push_coroutine.hpp index 533d4f9..d152be2 100644 --- a/include/boost/coroutine2/detail/push_coroutine.hpp +++ b/include/boost/coroutine2/detail/push_coroutine.hpp @@ -43,7 +43,7 @@ public: explicit push_coroutine( Fn &&); template< typename StackAllocator, typename Fn > - push_coroutine( StackAllocator, Fn &&); + push_coroutine( StackAllocator &&, Fn &&); ~push_coroutine(); @@ -123,7 +123,7 @@ public: explicit push_coroutine( Fn &&); template< typename StackAllocator, typename Fn > - push_coroutine( StackAllocator, Fn &&); + push_coroutine( StackAllocator &&, Fn &&); ~push_coroutine(); @@ -201,7 +201,7 @@ public: explicit push_coroutine( Fn &&); template< typename StackAllocator, typename Fn > - push_coroutine( StackAllocator, Fn &&); + push_coroutine( StackAllocator &&, Fn &&); ~push_coroutine(); diff --git a/include/boost/coroutine2/detail/push_coroutine.ipp b/include/boost/coroutine2/detail/push_coroutine.ipp index 303961b..dd51403 100644 --- a/include/boost/coroutine2/detail/push_coroutine.ipp +++ b/include/boost/coroutine2/detail/push_coroutine.ipp @@ -43,8 +43,8 @@ push_coroutine< T >::push_coroutine( Fn && fn) : template< typename T > template< typename StackAllocator, typename Fn > -push_coroutine< T >::push_coroutine( StackAllocator salloc, Fn && fn) : - cb_{ create_control_block< control_block >( salloc, std::forward< Fn >( fn) ) } { +push_coroutine< T >::push_coroutine( StackAllocator && salloc, Fn && fn) : + cb_{ create_control_block< control_block >( std::forward< StackAllocator >( salloc), std::forward< Fn >( fn) ) } { } template< typename T > @@ -103,8 +103,8 @@ push_coroutine< T & >::push_coroutine( Fn && fn) : template< typename T > template< typename StackAllocator, typename Fn > -push_coroutine< T & >::push_coroutine( StackAllocator salloc, Fn && fn) : - cb_{ create_control_block< control_block >( salloc, std::forward< Fn >( fn) ) } { +push_coroutine< T & >::push_coroutine( StackAllocator && salloc, Fn && fn) : + cb_{ create_control_block< control_block >( std::forward< StackAllocator >( salloc), std::forward< Fn >( fn) ) } { } template< typename T > @@ -154,8 +154,8 @@ push_coroutine< void >::push_coroutine( Fn && fn) : } template< typename StackAllocator, typename Fn > -push_coroutine< void >::push_coroutine( StackAllocator salloc, Fn && fn) : - cb_{ create_control_block< control_block >( salloc, std::forward< Fn >( fn) ) } { +push_coroutine< void >::push_coroutine( StackAllocator && salloc, Fn && fn) : + cb_{ create_control_block< control_block >( std::forward< StackAllocator >( salloc), std::forward< Fn >( fn) ) } { } inline