@@ -133,8 +133,8 @@ inline void ttParallelFor(std::size_t begin, std::size_t end, Worker& worker) {
133133}
134134
135135// Execute the IWorker over the range in parallel then join results
136- template <typename T >
137- inline void ttParallelReduce (std::size_t begin, std::size_t end, T& worker ) {
136+ template <typename Reducer >
137+ inline void ttParallelReduce (std::size_t begin, std::size_t end, Reducer& reducer ) {
138138
139139 using namespace tthread ;
140140
@@ -145,10 +145,10 @@ inline void ttParallelReduce(std::size_t begin, std::size_t end, T& worker) {
145145 std::vector<thread*> threads;
146146 std::vector<Worker*> workers;
147147 for (std::size_t i = 0 ; i<ranges.size (); ++i) {
148- T* pWorker = new T ();
149- pWorker ->split (static_cast <T &>(worker ));
150- workers.push_back (pWorker );
151- threads.push_back (new thread (workerThread, new Work (ranges[i], *pWorker )));
148+ Reducer* pReducer = new Reducer ();
149+ pReducer ->split (static_cast <Reducer &>(reducer ));
150+ workers.push_back (pReducer );
151+ threads.push_back (new thread (workerThread, new Work (ranges[i], *pReducer )));
152152 }
153153
154154 // wait for each thread, join it's results, then delete the worker & thread
@@ -158,14 +158,13 @@ inline void ttParallelReduce(std::size_t begin, std::size_t end, T& worker) {
158158 threads[i]->join ();
159159
160160 // join the results
161- worker .join (static_cast <T &>(*workers[i]));
161+ reducer .join (static_cast <Reducer &>(*workers[i]));
162162
163163 // delete the worker (which we split above) and the thread
164164 delete workers[i];
165165 delete threads[i];
166166 }
167167}
168-
169168} // namespace RcppParallel
170169
171170// //// TBB Implementation /////////////////////////////////////////////
@@ -193,49 +192,49 @@ inline void tbbParallelFor(std::size_t begin, std::size_t end, Worker& worker) {
193192 tbb::parallel_for (tbb::blocked_range<size_t >(begin, end), tbbWorker);
194193}
195194
196- template <typename T >
197- struct TBBReduce
195+ template <typename Reducer >
196+ struct TBBReducer
198197{
199- explicit TBBReduce (T& reduce )
200- : pReduce_(&reduce ), wasSplit_(false )
198+ explicit TBBReducer (Reducer& reducer )
199+ : pReducer_(&reducer ), wasSplit_(false )
201200 {
202201 }
203202
204- virtual ~TBBReduce () {
203+ virtual ~TBBReducer () {
205204 try
206205 {
207206 if (wasSplit_)
208- delete pReduce_ ;
207+ delete pReducer_ ;
209208 }
210209 catch (...)
211210 {
212211 }
213212 }
214213
215214 void operator ()(const tbb::blocked_range<size_t >& r) {
216- pReduce_ ->operator ()(r.begin (), r.end ());
215+ pReducer_ ->operator ()(r.begin (), r.end ());
217216 }
218217
219- TBBReduce (TBBReduce& reduce , tbb::split)
220- : pReduce_ (new T ()), wasSplit_(true )
218+ TBBReducer (TBBReducer& reducer , tbb::split)
219+ : pReducer_ (new Reducer ()), wasSplit_(true )
221220 {
222- pReduce_ ->split (*reduce. pReduce_ );
221+ pReducer_ ->split (*reducer. pReducer_ );
223222 }
224223
225- void join (const TBBReduce& reduce ) {
226- pReduce_ ->join (*reduce. pReduce_ );
224+ void join (const TBBReducer& reducer ) {
225+ pReducer_ ->join (*reducer. pReducer_ );
227226 }
228227
229228private:
230- T* pReduce_ ;
229+ Reducer* pReducer_ ;
231230 bool wasSplit_;
232231};
233232
234- template <typename T >
235- inline void tbbParallelReduce (std::size_t begin, std::size_t end, T& worker ) {
233+ template <typename Reducer >
234+ inline void tbbParallelReduce (std::size_t begin, std::size_t end, Reducer& reducer ) {
236235
237- TBBReduce<T> tbbReduce (worker );
238- tbb::parallel_reduce (tbb::blocked_range<size_t >(begin, end), tbbReduce );
236+ TBBReducer<Reducer> tbbReducer (reducer );
237+ tbb::parallel_reduce (tbb::blocked_range<size_t >(begin, end), tbbReducer );
239238}
240239
241240} // namespace RcppParallel
@@ -256,13 +255,13 @@ inline void parallelFor(std::size_t begin, std::size_t end, Worker& worker) {
256255
257256}
258257
259- template <typename T >
260- inline void parallelReduce (std::size_t begin, std::size_t end, T& worker ) {
258+ template <typename Reducer >
259+ inline void parallelReduce (std::size_t begin, std::size_t end, Reducer& reducer ) {
261260
262261#if RCPP_PARALLEL_USE_TBB
263- tbbParallelReduce (begin, end, worker );
262+ tbbParallelReduce (begin, end, reducer );
264263#else
265- ttParallelReduce (begin, end, worker );
264+ ttParallelReduce (begin, end, reducer );
266265#endif
267266
268267}
0 commit comments