diff --git a/smp/src/bimap.cpp b/smp/src/bimap.cpp index dafd11e19..b20e96d46 100644 --- a/smp/src/bimap.cpp +++ b/smp/src/bimap.cpp @@ -49,9 +49,9 @@ std::map paradiseo::smp::Bimap::getLeft() const template void paradiseo::smp::Bimap::removeFromRight(const A& a) { - for(auto& it : leftAssociation) - if(it->second == a) - leftAssociation.erase(it); + leftAssociation.erase(remove(leftAssociation.begin(), leftAssociation.end(), + [&](std::pair& i) -> bool { return i->second == a; }), + leftAssociation.end()); rightAssociation.erase(a); } @@ -59,9 +59,9 @@ void paradiseo::smp::Bimap::removeFromRight(const A& a) template void paradiseo::smp::Bimap::removeFromLeft(const B& b) { - for(auto& it : rightAssociation) - if(it->second == b) - rightAssociation.erase(it); + rightAssociation.erase(remove(rightAssociation.begin(), rightAssociation.end(), + [&](std::pair& i) -> bool { return i->second == b; }), + rightAssociation.end()); leftAssociation.erase(b); } diff --git a/smp/src/island.cpp b/smp/src/island.cpp index d0c7997ee..f09c451ac 100644 --- a/smp/src/island.cpp +++ b/smp/src/island.cpp @@ -116,14 +116,14 @@ void paradiseo::smp::Island::send(eoSelect& _select) eoPop baseMigPop; for(auto& indi : migPop) baseMigPop.push_back(std::move(convertToBase(indi))); - - //std::cout << "On envoie de l'île : " << migPop << std::endl; // Delete delivered messages - for(auto it = sentMessages.begin(); it != sentMessages.end(); it++) - if(!it->joinable()) - sentMessages.erase(it); - + sentMessages.erase(std::remove_if(sentMessages.begin(), sentMessages.end(), + [&](std::thread& i) -> bool + { return !i.joinable(); } + ), + sentMessages.end()); + sentMessages.push_back(std::thread(&IslandModel::update, model, std::move(baseMigPop), this)); } } diff --git a/smp/src/island.h b/smp/src/island.h index 4c3a26165..51ac28a15 100644 --- a/smp/src/island.h +++ b/smp/src/island.h @@ -35,6 +35,7 @@ Contact: paradiseo-help@lists.gforge.inria.fr #include #include #include +#include #include #include