1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include <boost/coroutine/all.hpp>
#include <boost/bind.hpp>
#include "X.h"
typedef boost::coroutines::asymmetric_coroutine< X& >::pull_type pull_coro_t;
typedef boost::coroutines::asymmetric_coroutine< X& >::push_type push_coro_t;
void foo1( push_coro_t & sink)
{
for ( int i = 0; i < 10; ++i)
{
X x( i);
sink( x);
}
}
void foo2( pull_coro_t & source)
{
while ( source) {
X & x = source.get();
source();
}
}
void bar()
{
{
pull_coro_t source( foo1);
while ( source) {
X & x = source.get();
source();
}
}
{
push_coro_t sink( foo2);
for ( int i = 0; i < 10; ++i)
{
X x( i);
sink( x);
}
}
}
|