coroutines::processor

Boost.Coroutineのドキュメントの「Further Development」の項にgeneratorのOutput Iteratorなるものが書かれているのを見つけたので、一足先に実装してみました。
<hamigaki/coroutine/processor.hpp>
いつも通りテストコードの抜粋を貼っておきます。

typedef coro::processor<int> processor_type;

void print_processor_body(processor_type::self& self, int arg)
{
    while (true)
    {
        std::cout << arg << std::endl;
        arg = self.yield();
    }
}

void processor_test()
{
    std::copy(
        boost::make_counting_iterator(0),
        boost::make_counting_iterator(10),
        processor_type(print_processor_body)
    );
}

コルーチンの引数は初回のみbodyの引数で、それ以降はyield()の戻り値になります。
ちょっと格好悪いですが、argの値は手動で更新する必要があります。