// Copyright Nat Goodspeed 2013. // 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) #include #include #include #include #include #include #include "coroutine.hpp" struct FinalEOL{ ~FinalEOL(){ std::cout << std::endl; } }; typedef coroutine< std::string > coro_t; int main(int argc,char* argv[]){ std::vector words{ "peas", "porridge", "hot", "peas", "porridge", "cold", "peas", "porridge", "in", "the", "pot", "nine", "days", "old" }; int num=5,width=15; coro_t::push_type writer( boost::context::fixedsize(), [&](coro_t::pull_type& in){ // finish the last line when we leave by whatever means FinalEOL eol; // pull values from upstream, lay them out 'num' to a line for (;;){ for(int i=0;i::iterator i = words.begin(); std::vector::iterator e = words.end(); while ( i != e) { std::string w( * i); writer( w); ++i; } std::cout << "\nDone" << std::endl; return 0; }