static void split( const SourceContainer &from, openmp_state< typename SourceContainer::value_type > &to ) { if(to.size() == 0) to.resize( omp_get_max_threads() ); const size_t part = from.size() / to.size(); # pragma omp parallel for schedule(dynamic) for(size_t i = 0 ; i < to.size() ; i++) { typedef typename SourceContainer::const_iterator it_t; const it_t begin = from.begin() + i * part; it_t end = begin + part; // for cases where from.size() % to.size() > 0 if(i + 1 == to.size() || end > from.end()) end = from.end(); to[i].resize(end - begin); std::copy(begin, end, to[i].begin()); } }
void push_back( TargetContainer& x, const SourceContainer& y ){ x.insert( x.end(), y.begin(), y.end() ) ; }