From d7fbbabe5e1878abb6d0513ece99a9d94bcd07dc Mon Sep 17 00:00:00 2001 From: Anthony Geay Date: Thu, 1 Oct 2015 18:44:30 +0200 Subject: [PATCH] Change implementation of getMaxLevelOfPara. --- src/engine/Bloc.cxx | 37 ++++++++----------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/src/engine/Bloc.cxx b/src/engine/Bloc.cxx index 6395112b5..a3dcd3899 100644 --- a/src/engine/Bloc.cxx +++ b/src/engine/Bloc.cxx @@ -25,6 +25,7 @@ #include "OutputDataStreamPort.hxx" #include "ElementaryNode.hxx" #include "Visitor.hxx" +#include "SetOfPoints.hxx" #include #include @@ -452,37 +453,15 @@ void Bloc::accept(Visitor* visitor) */ int Bloc::getMaxLevelOfParallelism() const { - std::set s(_setOfNode.begin(),_setOfNode.end()); - for(std::set::const_iterator it=s.begin();it!=s.end();it++) - (*it)->_colour=White; - std::vector levs; - while(!s.empty()) + std::vector< std::list > r(splitIntoIndependantGraph()); + int ret(0); + for(std::vector< std::list >::const_iterator it=r.begin();it!=r.end();it++) { - Node *seed(*(s.begin())); - int myCurLev(0); - while(seed) - { - s.erase(seed); - std::set ingates(seed->getOutGate()->edSetInGate()); - int myCurLev2(seed->getMaxLevelOfParallelism()); - for(std::set::const_iterator it=ingates.begin();it!=ingates.end();it++) - { - Node *curNode((*it)->getNode()); - curNode->_colour=Grey; - myCurLev2=std::max(curNode->getMaxLevelOfParallelism(),myCurLev2); - } - myCurLev=std::max(myCurLev,myCurLev2); - seed=0; - for(std::set::const_iterator it=s.begin();it!=s.end();it++) - if((*it)->_colour==Grey) - { - seed=*it; - break; - } - } - levs.push_back(myCurLev); + SetOfPoints sop(*it); + sop.simplify(); + ret+=sop.getMaxLevelOfParallelism(); } - return std::accumulate(levs.begin(),levs.end(),0); + return ret; } /*! -- 2.39.2