

| template<
class Container, class T, class Op > |
|
| T paccumulate(
Container c, T init, Op op ) { vector< future<T> > workers = |
|
| active for each( T t in c ) //
spawn |
|
| init = op( init, *i ); |
|
| return accumulate( workers, init, { op( _1, _2.init.wait() ) } ); // gather |
|
| } |
|
| template<
class Container, class T, class Op > |
|
| T paccumulate(
Container c, T init, Op op ) { vector< future<T> > workers; int num = distance( c.begin(), c.end() ); |
|
| for( int worker = 0; worker <
get_workers(); ++worker ) workers.push_back( active { // spawn |
|
| return accumulate( c.begin() +
worker/num, c.begin() + (worker+1)/num, op, 0 ); |
|
| } ); |
|
| return accumulate( workers, init, { op( _1, _2.init.wait() ) } ); // gather |
|
| } |
|