#ifndef RESULTS_CILK #define RESULTS_CILK #include #include #include "results.hpp" class ResultsReducer{ private: struct Monoid:cilk::monoid_base{ static void reduce(Results* left,Results* right); }; cilk::reducer imp_; public: ResultsReducer(); size_t& n(size_t g); void reset(); Results& get_results(); }; extern ResultsReducer cilk_results; inline ResultsReducer::ResultsReducer():imp_(){ } inline void ResultsReducer::reset(){ imp_.view().clear(); } inline void ResultsReducer::Monoid::reduce(Results* left,Results* right){ left->add(*right); } inline size_t& ResultsReducer::n(size_t g){ return imp_.view().n[g]; } inline Results& ResultsReducer::get_results(){ return imp_.view(); } #endif