Salome HOME
Error management in py2yacs.
[modules/yacs.git] / src / engine / ElementaryNode.cxx
index a2dd127df25324571d0b3591038c75fd6c90e9a0..d227016b9bfb3542e7209a44ed99752a91644b43 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2015  CEA/DEN, EDF R&D
+// Copyright (C) 2006-2019  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
@@ -47,11 +47,13 @@ using namespace std;
 ElementaryNode::ElementaryNode(const std::string& name):
   Node(name),
   _createDatastreamPorts(false),
-  _multi_port_node(false)
+  _multi_port_node(false),
+  _weight()
 {
+  _weight.setDefaultElementary();
 }
 
-ElementaryNode::ElementaryNode(const ElementaryNode& other, ComposedNode *father):Node(other,father)
+ElementaryNode::ElementaryNode(const ElementaryNode& other, ComposedNode *father):Node(other,father), _weight(other._weight)
 {
   _createDatastreamPorts = other._createDatastreamPorts;
   _multi_port_node = other._multi_port_node;
@@ -85,24 +87,25 @@ ElementaryNode::~ElementaryNode()
     delete *iter4;
 }
 
-void ElementaryNode::init(bool start)
+void ElementaryNode::initCommonPartWithoutStateManagement(bool start)
 {
-  DEBTRACE("ElementaryNode::init " << getName() << " " << start << " " << _state);
-
   for(list<OutputPort *>::iterator iter=_setOfOutputPort.begin();iter!=_setOfOutputPort.end();iter++)
     (*iter)->exInit();
   for(list<InputPort *>::iterator iter2=_setOfInputPort.begin();iter2!=_setOfInputPort.end();iter2++)
     (*iter2)->exInit(start);
   _inGate.exReset();
+}
+
+void ElementaryNode::init(bool start)
+{
+  DEBTRACE("ElementaryNode::init " << getName() << " " << start << " " << _state);
+  initCommonPartWithoutStateManagement(start);
   if(_state == YACS::DISABLED)
     {
       exDisabledState(); // to refresh propagation of DISABLED state
-      return;
+      return ;
     }
-  if(start) //complete initialization
-    setState(YACS::READY);
-  else if(_state > YACS::LOADED)//partial initialization (inside a loop)
-    setState(YACS::TORECONNECT);
+  setState(YACS::READY);
 }
 
 bool ElementaryNode::isDeployable() const
@@ -432,10 +435,10 @@ void ElementaryNode::getReadyTasks(std::vector<Task *>& tasks)
           std::string input_port_name = (*iter1)->getName();
           // Get Port Name in master node
           InputPort * master_port = getInputPort(input_port_name);
-          for (std::set<OutPort *>::const_iterator itt=master_port->_backLinks.begin(); itt!=master_port->_backLinks.end();itt++)
+          for (auto itt : master_port->_backLinks)
           {
             // Connect dataflow
-            getProc()->edAddDFLink((*itt),(*iter1));
+            getProc()->edAddDFLink(itt.first,(*iter1));
           }
         }
 
@@ -891,3 +894,10 @@ void ElementaryNode::getCoupledNodes(std::set<Task*>& coupledSet)
     }
 }
 
+void ElementaryNode::setWeight(double elementaryWeight)
+{
+  if(elementaryWeight<=0.)
+    throw Exception("ElementaryNode::setWeight : invalid input value !");
+  _weight.setElementaryWeight(elementaryWeight);
+}
+