corrected corourine_context in asyymetric coroutine

This commit is contained in:
Oliver Kowalke
2014-03-11 19:52:39 +01:00
parent 189fcd1027
commit c913a541d1
10 changed files with 173 additions and 209 deletions

View File

@@ -29,36 +29,6 @@ project boost/coroutine/example
<threading>multi
;
exe simple
: simple.cpp
;
exe chaining
: chaining.cpp
;
exe echo
: echo.cpp
;
exe exception
: exception.cpp
;
exe fibonacci
: fibonacci.cpp
;
exe layout
: layout.cpp
;
exe parallel
: parallel.cpp
;
exe power
: power.cpp
;
exe same_fringe
: same_fringe.cpp
;
exe segmented_stack
: segmented_stack.cpp
;
exe unwind
: unwind.cpp
exe test_case
: test_case.cpp
;

View File

@@ -4,61 +4,23 @@
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <boost/bind.hpp>
#include <boost/coroutine/all.hpp>
struct X
void coro(boost::coroutines::coroutine<void>::pull_type& c)
{
int i;
X( int i_) :
i( i_)
{}
};
typedef boost::coroutines::asymmetric_coroutine< X& >::pull_type pull_coro_t;
typedef boost::coroutines::asymmetric_coroutine< X& >::push_type push_coro_t;
void fn1( push_coro_t & sink)
{
for ( int i = 0; i < 10; ++i)
{
X x( i);
sink( x);
}
std::printf("in coro!\n");
}
void fn2( pull_coro_t & source)
{
while ( source) {
X & x = source.get();
std::cout << "i = " << x.i << std::endl;
source();
}
}
int main( int argc, char * argv[])
int main()
{
{
pull_coro_t source( fn1);
while ( source) {
X & x = source.get();
std::cout << "i = " << x.i << std::endl;
source();
}
boost::coroutines::coroutine<void>::push_type p(coro);
std::printf("after construction\n");
}
{
push_coro_t sink( fn2);
for ( int i = 0; i < 10; ++i)
{
X x( i);
sink( x);
}
}
std::cout << "Done" << std::endl;
return EXIT_SUCCESS;
}