123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- // Copyright Oliver Kowalke 2014.
- // 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_COROUTINES2_DETAIL_PUSH_CONTROL_BLOCK_HPP
- #define BOOST_COROUTINES2_DETAIL_PUSH_CONTROL_BLOCK_HPP
- #include <exception>
- #include <boost/config.hpp>
- #include <boost/context/fiber.hpp>
- #include <boost/coroutine2/detail/state.hpp>
- #ifdef BOOST_HAS_ABI_HEADERS
- # include BOOST_ABI_PREFIX
- #endif
- namespace boost {
- namespace coroutines2 {
- namespace detail {
- template< typename T >
- struct push_coroutine< T >::control_block {
- boost::context::fiber c;
- typename pull_coroutine< T >::control_block * other;
- state_t state;
- std::exception_ptr except;
- static void destroy( control_block * cb) noexcept;
- template< typename StackAllocator, typename Fn >
- control_block( context::preallocated, StackAllocator &&, Fn &&);
- control_block( typename pull_coroutine< T >::control_block *, boost::context::fiber &) noexcept;
- control_block( control_block &) = delete;
- control_block & operator=( control_block &) = delete;
- void deallocate() noexcept;
- void resume( T const&);
- void resume( T &&);
- bool valid() const noexcept;
- };
- template< typename T >
- struct push_coroutine< T & >::control_block {
- boost::context::fiber c;
- typename pull_coroutine< T & >::control_block * other;
- state_t state;
- std::exception_ptr except;
- static void destroy( control_block * cb) noexcept;
- template< typename StackAllocator, typename Fn >
- control_block( context::preallocated, StackAllocator &&, Fn &&);
- control_block( typename pull_coroutine< T & >::control_block *, boost::context::fiber &) noexcept;
- control_block( control_block &) = delete;
- control_block & operator=( control_block &) = delete;
- void deallocate() noexcept;
- void resume( T &);
- bool valid() const noexcept;
- };
- struct push_coroutine< void >::control_block {
- boost::context::fiber c;
- pull_coroutine< void >::control_block * other;
- state_t state;
- std::exception_ptr except;
- static void destroy( control_block * cb) noexcept;
- template< typename StackAllocator, typename Fn >
- control_block( context::preallocated, StackAllocator &&, Fn &&);
- control_block( pull_coroutine< void >::control_block *, boost::context::fiber &) noexcept;
- control_block( control_block &) = delete;
- control_block & operator=( control_block &) = delete;
- void deallocate() noexcept;
- void resume();
- bool valid() const noexcept;
- };
- }}}
- #ifdef BOOST_HAS_ABI_HEADERS
- # include BOOST_ABI_SUFFIX
- #endif
- #endif // BOOST_COROUTINES2_DETAIL_PUSH_CONTROL_BLOCK_HPP
|