X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2Fengine%2FLoop.cxx;h=f41ac414b378fcbb957d3a78b4b643f79a816032;hb=255150e4eec79294bbd06c7c464f309b4a264960;hp=e52a93c00accc0072180167d0496a88b284aa197;hpb=f4c10bf1781a76534bb1fa293aef541aef56148b;p=modules%2Fyacs.git diff --git a/src/engine/Loop.cxx b/src/engine/Loop.cxx index e52a93c00..f41ac414b 100644 --- a/src/engine/Loop.cxx +++ b/src/engine/Loop.cxx @@ -1,21 +1,22 @@ -// Copyright (C) 2006-2008 CEA/DEN, EDF R&D +// Copyright (C) 2006-2023 CEA, EDF // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + #include "Loop.hxx" #include "InputPort.hxx" #include "OutputPort.hxx" @@ -46,7 +47,7 @@ void InputPort4DF2DS::getAllRepresentants(std::set& repr) const repr.insert(s.begin(),s.end()); } -void *InputPort4DF2DS::get() const throw(Exception) +void *InputPort4DF2DS::get() const { if(!_data) { @@ -74,7 +75,7 @@ void InputPort4DF2DS::exSaveInit() _initValue->incrRef(); } -void InputPort4DF2DS::put(const void *data) throw(ConversionException) +void InputPort4DF2DS::put(const void *data) { put((Any *)data); } @@ -84,10 +85,16 @@ InputPort *InputPort4DF2DS::clone(Node *newHelder) const throw Exception("InputPort4DF2DS::clone : internal error"); } -void InputPort4DF2DS::put(Any *data) +void InputPort4DF2DS::releaseData() { if(_data) _data->decrRef(); + _data = nullptr; +} + +void InputPort4DF2DS::put(Any *data) +{ + InputPort4DF2DS::releaseData(); _data=data; _data->incrRef(); } @@ -108,19 +115,25 @@ DFToDSForLoop::DFToDSForLoop(Loop *loop, const std::string& name, TypeCode* type DFToDSForLoop::~DFToDSForLoop() { + edDisconnectAllLinksWithMe(); } void DFToDSForLoop::getReadyTasks(std::vector& tasks) { } -InputPort *DFToDSForLoop::getInputPort(const std::string& name) const throw(Exception) +InputPort *DFToDSForLoop::getInputPort(const std::string& name) const { + try { + return Node::getInputPort(name); + } + catch(Exception& e) {} + list::const_iterator it =_setOfInputPort.begin(); return (*it); } -OutputDataStreamPort *DFToDSForLoop::getOutputDataStreamPort(const std::string& name) const throw(Exception) +OutputDataStreamPort *DFToDSForLoop::getOutputDataStreamPort(const std::string& name) const { list::const_iterator it =_setOfOutputDataStreamPort.begin(); return (*it); @@ -154,7 +167,7 @@ void OutputPort4DS2DF::getAllRepresented(std::set& represented) const (*iter)->getAllRepresented(represented); } -void OutputPort4DS2DF::put(const void *data) throw(ConversionException) +void OutputPort4DS2DF::put(const void *data) { put((Any *)data); OutputPort::put(data); @@ -207,19 +220,20 @@ Node *DSToDFForLoop::simpleClone(ComposedNode *father, bool editionOnly) const DSToDFForLoop::~DSToDFForLoop() { + edDisconnectAllLinksWithMe(); } void DSToDFForLoop::getReadyTasks(std::vector& tasks) { } -OutputPort *DSToDFForLoop::getOutputPort(const std::string& name) const throw(Exception) +OutputPort *DSToDFForLoop::getOutputPort(const std::string& name) const { list::const_iterator it = _setOfOutputPort.begin(); return (*it); } -InputDataStreamPort *DSToDFForLoop::getInputDataStreamPort(const std::string& name) const throw(Exception) +InputDataStreamPort *DSToDFForLoop::getInputDataStreamPort(const std::string& name) const { list::const_iterator it = _setOfInputDataStreamPort.begin(); return (*it); @@ -256,17 +270,11 @@ Node *FakeNodeForLoop::simpleClone(ComposedNode *father, bool editionOnly) const void FakeNodeForLoop::exForwardFailed() { _loop->exForwardFailed(); - FakeNodeForLoop *normallyThis=_loop->_nodeForNullTurnOfLoops; - _loop->_nodeForNullTurnOfLoops=0; - delete normallyThis; } void FakeNodeForLoop::exForwardFinished() { _loop->exForwardFinished(); - FakeNodeForLoop *normallyThis=_loop->_nodeForNullTurnOfLoops; - _loop->_nodeForNullTurnOfLoops=0; - delete normallyThis; } void FakeNodeForLoop::execute() @@ -301,7 +309,7 @@ Loop::Loop(const std::string& name):StaticDefinedComposedNode(name),_node(0),_nb Loop::~Loop() { delete _node; - delete _nodeForNullTurnOfLoops; + if(_nodeForNullTurnOfLoops)delete _nodeForNullTurnOfLoops; for(set::iterator iter1=_inputsTraducer.begin();iter1!=_inputsTraducer.end();iter1++) delete (*iter1); for(set::iterator iter2=_outputsTraducer.begin();iter2!=_outputsTraducer.end();iter2++) @@ -342,7 +350,7 @@ Node *Loop::edSetNode(Node *node) return ret; } -bool Loop::edAddChild(Node *node) throw(Exception) +bool Loop::edAddChild(Node *node) { return edSetNode(node); } @@ -382,7 +390,7 @@ void Loop::getReadyTasks(std::vector& tasks) } } -void Loop::edRemoveChild(Node *node) throw(Exception) +void Loop::edRemoveChild(Node *node) { StaticDefinedComposedNode::edRemoveChild(node); if(_node==node) @@ -390,10 +398,6 @@ void Loop::edRemoveChild(Node *node) throw(Exception) modified(); } -void Loop::selectRunnableTasks(std::vector& tasks) -{ -} - std::list Loop::edGetDirectDescendants() const { list ret; @@ -414,7 +418,26 @@ int Loop::getNumberOfInputPorts() const return StaticDefinedComposedNode::getNumberOfInputPorts()+1; } -Node *Loop::getChildByShortName(const std::string& name) const throw(Exception) +int Loop::getMaxLevelOfParallelism() const +{ + if(!_node) + return 0; + return _node->getMaxLevelOfParallelism(); +} + +void Loop::getWeightRegardingDPL(ComplexWeight *weight) +{ + if(_node) + _node->getWeightRegardingDPL(weight); +} + +void Loop::partitionRegardingDPL(const PartDefinition *pd, std::map >& zeMap) +{ + if(_node) + _node->partitionRegardingDPL(pd,zeMap); +} + +Node *Loop::getChildByShortName(const std::string& name) const { if (_node) if(name==_node->getName()) @@ -423,12 +446,12 @@ Node *Loop::getChildByShortName(const std::string& name) const throw(Exception) throw Exception(what); } -TypeCode* Loop::MappingDF2DS(TypeCode* type) throw(Exception) +TypeCode* Loop::MappingDF2DS(TypeCode* type) { return type; } -TypeCode* Loop::MappingDS2DF(TypeCode* type) throw(Exception) +TypeCode* Loop::MappingDS2DF(TypeCode* type) { return type; } @@ -436,9 +459,9 @@ TypeCode* Loop::MappingDS2DF(TypeCode* type) throw(Exception) void Loop::buildDelegateOf(InPort * & port, OutPort *initialStart, const std::list& pointsOfView) { string typeOfPortInstance=port->getNameOfTypeOfCurrentInstance(); - if(typeOfPortInstance!=InputPort::NAME or - (typeOfPortInstance == InputPort::NAME and - initialStart->getNameOfTypeOfCurrentInstance()== OutputPort::NAME and + if(typeOfPortInstance!=InputPort::NAME || + (typeOfPortInstance == InputPort::NAME && + initialStart->getNameOfTypeOfCurrentInstance()== OutputPort::NAME && !isNecessaryToBuildSpecificDelegateDF2DS(pointsOfView)) ) return ; InputPort *portCasted=(InputPort *)port; @@ -461,9 +484,9 @@ void Loop::buildDelegateOf(InPort * & port, OutPort *initialStart, const std::li void Loop::buildDelegateOf(std::pair& port, InPort *finalTarget, const std::list& pointsOfView) { string typeOfPortInstance=(port.first)->getNameOfTypeOfCurrentInstance(); - if(typeOfPortInstance!=OutputPort::NAME or - ( typeOfPortInstance == OutputPort::NAME and - finalTarget->getNameOfTypeOfCurrentInstance()== InputPort::NAME and + if(typeOfPortInstance!=OutputPort::NAME || + ( typeOfPortInstance == OutputPort::NAME && + finalTarget->getNameOfTypeOfCurrentInstance()== InputPort::NAME && !isNecessaryToBuildSpecificDelegateDF2DS(pointsOfView)) ) return ; OutPort *portCasted=port.first; @@ -490,12 +513,12 @@ void Loop::buildDelegateOf(std::pair& port, InPort *finalT port.first=(*iter)->getOutputDataStreamPort(""); } -void Loop::getDelegateOf(InPort * & port, OutPort *initialStart, const std::list& pointsOfView) throw(Exception) +void Loop::getDelegateOf(InPort * & port, OutPort *initialStart, const std::list& pointsOfView) { string typeOfPortInstance=port->getNameOfTypeOfCurrentInstance(); - if(typeOfPortInstance!=InputPort::NAME or - (typeOfPortInstance == InputPort::NAME and - initialStart->getNameOfTypeOfCurrentInstance()== OutputPort::NAME and + if(typeOfPortInstance!=InputPort::NAME || + (typeOfPortInstance == InputPort::NAME && + initialStart->getNameOfTypeOfCurrentInstance()== OutputPort::NAME && !isNecessaryToBuildSpecificDelegateDF2DS(pointsOfView)) ) return ; InputPort *portCasted=(InputPort *)port; @@ -513,12 +536,12 @@ void Loop::getDelegateOf(InPort * & port, OutPort *initialStart, const std::list } void Loop::getDelegateOf(std::pair& port, InPort *finalTarget, - const std::list& pointsOfView) throw(Exception) + const std::list& pointsOfView) { string typeOfPortInstance=(port.first)->getNameOfTypeOfCurrentInstance(); - if(typeOfPortInstance!=OutputPort::NAME or - ( typeOfPortInstance == OutputPort::NAME and - finalTarget->getNameOfTypeOfCurrentInstance()== InputPort::NAME and + if(typeOfPortInstance!=OutputPort::NAME || + ( typeOfPortInstance == OutputPort::NAME && + finalTarget->getNameOfTypeOfCurrentInstance()== InputPort::NAME && !isNecessaryToBuildSpecificDelegateDF2DS(pointsOfView)) ) return ; OutPort *portCasted=port.first; @@ -535,12 +558,12 @@ void Loop::getDelegateOf(std::pair& port, InPort *finalTar port.first=(*iter)->getOutputDataStreamPort(""); } -void Loop::releaseDelegateOf(InPort * & port, OutPort *initialStart, const std::list& pointsOfView) throw(Exception) +void Loop::releaseDelegateOf(InPort * & port, OutPort *initialStart, const std::list& pointsOfView) { string typeOfPortInstance=port->getNameOfTypeOfCurrentInstance(); - if(typeOfPortInstance!=InputPort::NAME or - ( typeOfPortInstance == InputPort::NAME and - initialStart->getNameOfTypeOfCurrentInstance()== OutputPort::NAME and + if(typeOfPortInstance!=InputPort::NAME || + ( typeOfPortInstance == InputPort::NAME && + initialStart->getNameOfTypeOfCurrentInstance()== OutputPort::NAME && !isNecessaryToBuildSpecificDelegateDF2DS(pointsOfView)) ) return ; InputPort *portCasted=(InputPort *)port; @@ -565,7 +588,7 @@ void Loop::releaseDelegateOf(InPort * & port, OutPort *initialStart, const std:: } } -void Loop::releaseDelegateOf(OutPort *portDwn, OutPort *portUp, InPort *finalTarget, const std::list& pointsOfView) throw(Exception) +void Loop::releaseDelegateOf(OutPort *portDwn, OutPort *portUp, InPort *finalTarget, const std::list& pointsOfView) { if(portDwn==portUp) return ; @@ -581,7 +604,7 @@ void Loop::releaseDelegateOf(OutPort *portDwn, OutPort *portUp, InPort *finalTar } } -void Loop::checkNoCyclePassingThrough(Node *node) throw(Exception) +void Loop::checkNoCyclePassingThrough(Node *node) { //throw Exception("Loop::checkNoCyclePassingThrough : Internal error occured"); } @@ -621,7 +644,7 @@ bool Loop::isNecessaryToBuildSpecificDelegateDF2DS(const std::list