...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
#include <boost/coroutine2/coroutine.hpp> template< typename Arg > class coroutine<>::push_type { public: template< typename Fn > push_type( Fn && fn); template< typename StackAllocator, typename Fn > push_type( StackAllocator stack_alloc, Fn && fn); push_type( push_type const& other)=delete; push_type & operator=( push_type const& other)=delete; ~push_type(); push_type( push_type && other) noexcept; push_type & operator=( push_type && other) noexcept; explicit operator bool() const noexcept; bool operator!() const noexcept; push_type & operator()( Arg arg); }; template< typename Arg > range_iterator< push_type< Arg > >::type begin( push_type< Arg > &); template< typename Arg > range_iterator< push_type< Arg > >::type end( push_type< Arg > &);
template< typename Fn
> push_type( Fn && fn)
Creates a coroutine which will execute fn
.
template< typename StackAllocator, typename Fn > push_type(
StackAllocator const& stack_alloc, Fn && fn)
Creates a coroutine which will execute fn
.
For allocating/deallocating the stack stack_alloc
is used.
~push_type()
Destroys the context and deallocates the stack.
push_type(
push_type &&
other)
noexcept
Moves the internal data of other
to *this
.
other
becomes not-a-coroutine.
Nothing.
push_type &
operator=(
push_type &&
other)
noexcept
Destroys the internal data of *this
and moves the internal data of
other
to *this
.
other
becomes not-a-coroutine.
Nothing.
explicit operator
bool()
const noexcept
If *this
refers to not-a-coroutine or the coroutine-function
has returned (completed), the function returns false
.
Otherwise true
.
Nothing.
bool operator!() const noexcept
If *this
refers to not-a-coroutine or the coroutine-function
has returned (completed), the function returns true
.
Otherwise false
.
Nothing.
push_type &
operator()(Arg arg)
push_type& coroutine<Arg>::push_type::operator()(Arg); push_type& coroutine<Arg&>::push_type::operator()(Arg&); push_type& coroutine<void>::push_type::operator()();
operator unspecified-bool-type() returns true
for *this
.
Execution control is transferred to coroutine-function
and the argument arg
is passed to the coroutine-function.
Exceptions thrown inside coroutine-function.
begin(
push_type<
Arg >
&)
template< typename Arg > range_iterator< push_type< Arg > >::type begin( push_type< Arg > &);
Returns a range-iterator (output-iterator).
end(
push_type<
Arg >
&)
template< typename Arg > range_iterator< push_type< Arg > >::type end( push_type< Arg > &);
Returns a end range-iterator (output-iterator).
When first obtained from begin( push_type< R
> &)
,
or after some number of increment operations, an iterator will compare
equal to the iterator returned by end( push_type< R
> &)
when the corresponding coroutine<>::push_type::operator
bool would return false
.