X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2Fengine%2FForLoop.cxx;h=140a949828c5c75c5e11deefbbf7797294a1b09c;hb=f31c1aa1cf3481bf51166f0c4e3dd118bc3ab43b;hp=e5368047f67de8d643d8488a4cb26c2f9b1d1a47;hpb=216c15bc1ec59372c7313d273cc0fa1d206a68d4;p=modules%2Fyacs.git diff --git a/src/engine/ForLoop.cxx b/src/engine/ForLoop.cxx index e5368047f..140a94982 100644 --- a/src/engine/ForLoop.cxx +++ b/src/engine/ForLoop.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2006-2014 CEA/DEN, EDF R&D +// Copyright (C) 2006-2015 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -265,17 +265,51 @@ std::list ForLoop::getSetOfOutputPort() const return ret; } + +int ForLoop::getNbSteps() const +{ + AnyInputPort* aNbStepsPort = (AnyInputPort*)&_nbOfTimesPort; + int nbSteps = 0; + if (aNbStepsPort && !aNbStepsPort->isEmpty()) + nbSteps = aNbStepsPort->getIntValue(); + return nbSteps; +} + std::string ForLoop::getProgress() const { std::stringstream aProgress; aProgress << "0"; - AnyInputPort* aNbStepsPort = (AnyInputPort*)&_nbOfTimesPort; - if (aNbStepsPort && !aNbStepsPort->isEmpty()) { - int nbSteps = aNbStepsPort->getIntValue(); - if (nbSteps > 0 && _nbOfTurns >= 0) { + int nbSteps = getNbSteps(); + if (nbSteps > 0 && _nbOfTurns >= 0) + { aProgress.str(""); aProgress << _nbOfTurns << "/" << nbSteps; } - } return aProgress.str(); } + +//! Get the progress weight for all elementary nodes +/*! + * Only elementary nodes have weight. For each node in the loop, the weight done is multiplied + * by the number of steps done and the weight total by the number total of steps + * + */ +list ForLoop::getProgressWeight() const +{ + list ret; + list setOfNode=edGetDirectDescendants(); + int nbStepsDone=getNbOfTurns(); + int nbStepsTotal=getNbSteps(); + for(list::const_iterator iter=setOfNode.begin();iter!=setOfNode.end();iter++) + { + list myCurrentSet=(*iter)->getProgressWeight(); + for(list::iterator iter=myCurrentSet.begin();iter!=myCurrentSet.end();iter++) + { + (*iter).weightDone=((*iter).weightTotal) * nbStepsDone; + (*iter).weightTotal*=nbStepsTotal; + } + ret.insert(ret.end(),myCurrentSet.begin(),myCurrentSet.end()); + } + return ret; +} +