diff --git a/eo/src/mpi/eoParallelApply.h b/eo/src/mpi/eoParallelApply.h index faedc7b38..a02254716 100644 --- a/eo/src/mpi/eoParallelApply.h +++ b/eo/src/mpi/eoParallelApply.h @@ -26,7 +26,7 @@ namespace eo // long _maxTime = 0, int _packetSize ) : - data( _pop ), func( _proc ), index( 0 ), size( _pop.size() ), packetSize( _packetSize ), masterRank( _masterRank ), comm( Node::comm() ) + _data( &_pop ), func( _proc ), index( 0 ), size( _pop.size() ), packetSize( _packetSize ), masterRank( _masterRank ), comm( Node::comm() ) { if ( _packetSize <= 0 ) { @@ -39,7 +39,7 @@ namespace eo { index = 0; size = _pop.size(); - data = _pop; + _data = &_pop; assignedTasks.clear(); } @@ -48,7 +48,12 @@ namespace eo delete [] tempArray; } - std::vector & data; + std::vector& data() + { + return *_data; + } + + std::vector * _data; eoUF & func; int index; int size; @@ -71,7 +76,6 @@ namespace eo // empty } - // futureIndex, index, packetSize, size, comm, assignedTasks, data void operator()(int wrkRank) { int futureIndex; @@ -92,7 +96,7 @@ namespace eo d->assignedTasks[ wrkRank ].index = d->index; d->assignedTasks[ wrkRank ].size = sentSize; - d->comm.send( wrkRank, 1, & ( (d->data)[ d->index ] ) , sentSize ); + d->comm.send( wrkRank, 1, & ( (d->data())[ d->index ] ) , sentSize ); d->index = futureIndex; } }; @@ -110,7 +114,7 @@ namespace eo void operator()(int wrkRank) { - d->comm.recv( wrkRank, 1, & (d->data[ d->assignedTasks[wrkRank].index ] ), d->assignedTasks[wrkRank].size ); + d->comm.recv( wrkRank, 1, & (d->data()[ d->assignedTasks[wrkRank].index ] ), d->assignedTasks[wrkRank].size ); } }; diff --git a/eo/test/mpi/eval.cpp b/eo/test/mpi/eval.cpp index 06fa8ad33..312c9d657 100644 --- a/eo/test/mpi/eval.cpp +++ b/eo/test/mpi/eval.cpp @@ -99,10 +99,10 @@ struct CatBestAnswers : public eo::mpi::HandleResponseParallelApply (*_wrapped)( wrkRank ); for(int i = index; i < index+size; ++i) { - if( best.fitness() < d->data[ i ].fitness() ) + if( best.fitness() < d->data()[ i ].fitness() ) { - eo::log << eo::quiet << "Better solution found:" << d->data[i].fitness() << std::endl; - best = d->data[ i ]; + eo::log << eo::quiet << "Better solution found:" << d->data()[i].fitness() << std::endl; + best = d->data()[ i ]; } } }