]> SALOME platform Git repositories - modules/yacs.git/commitdiff
Salome HOME
std::map to std::list in InGates storage inside OutGate to always reproduce the order...
authorAnthony Geay <anthony.geay@edf.fr>
Fri, 2 Oct 2015 07:50:24 +0000 (09:50 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Fri, 2 Oct 2015 07:50:24 +0000 (09:50 +0200)
12 files changed:
src/engine/AbstractPoint.cxx
src/engine/AbstractPoint.hxx
src/engine/Bloc.cxx
src/engine/Bloc.hxx
src/engine/BlocPoint.cxx
src/engine/Node.cxx
src/engine/OutGate.cxx
src/engine/OutGate.hxx
src/engine/VisitorSaveSchema.cxx
src/genericgui/SceneBlocItem.cxx
src/hmi/guiObservers.cxx
src/hmi/guiObservers.hxx

index 2a9f98e64c31f411e5a50f25f11f47253457a044..e5baa1bbc567a1b19489643beec51d3d67acd4f5 100644 (file)
@@ -216,7 +216,7 @@ bool AbstractPoint::IsGatherB4Ext(Node *node)
 bool AbstractPoint::isSimplyLinkedAfter(BlocPoint *sop, Node *node)
 {
   OutGate *oug(node->getOutGate());
-  std::set<InGate *> ings(oug->edSetInGate());
+  std::list<InGate *> ings(oug->edSetInGate());
   if(ings.size()==1)
     return true;
   if(ings.size()==0)
@@ -281,7 +281,7 @@ Node *AbstractPoint::GetNodeB4(Node *node)
 Node *AbstractPoint::GetNodeAfter(Node *node)
 {
   OutGate *oug(node->getOutGate());
-  std::set<InGate *> fl(oug->edSetInGate());
+  std::list<InGate *> fl(oug->edSetInGate());
   if(fl.size()>1)
     throw Exception("AbstractPoint::GetNodeAfter : precond not OK !");
   if(fl.size()==0)
@@ -318,11 +318,11 @@ bool AbstractPoint::IsCommonDirectSonOf(AbstractPoint *refFather, const std::lis
   return true;
 }
 
-bool AbstractPoint::IsCommonDirectSonOf(AbstractPoint *refFather, const std::set<InGate *>& ings, AbstractPoint *&ret)
+bool AbstractPoint::IsCommonDirectSonOf(AbstractPoint *refFather, const std::list<InGate *>& ings, AbstractPoint *&ret)
 {
   if(ings.size()<1)
     throw YACS::Exception("AbstractPoint::GetCommonDirectSonOf2 : not enough !");
-  std::set<InGate *>::const_iterator it(ings.begin());
+  std::list<InGate *>::const_iterator it(ings.begin());
   InGate *ref(*(it++));
   AbstractPoint *ref2(GetDirectSonOf(refFather,refFather->findPointWithNode(ref->getNode())));
   for(;it!=ings.end();it++)
index 1adc0839d7064b947ee51103ef3e37f61525fa08..11ddee6c24227d5709748db1f63dd01b51aa05b8 100644 (file)
@@ -22,7 +22,6 @@
 
 #include "YACSlibEngineExport.hxx"
 
-#include <set>
 #include <list>
 #include <vector>
 #include <string>
@@ -79,7 +78,7 @@ namespace YACS
       static Node *GetNodeAfter(Node *node);
       static AbstractPoint *GetDirectSonOf(AbstractPoint *refFather, AbstractPoint *sonOrLittleSon);
       static bool IsCommonDirectSonOf(AbstractPoint *refFather, const std::list<OutGate *>& outgs, AbstractPoint *&ret);
-      static bool IsCommonDirectSonOf(AbstractPoint *refFather, const std::set<InGate *>& ings, AbstractPoint *&ret);
+      static bool IsCommonDirectSonOf(AbstractPoint *refFather, const std::list<InGate *>& ings, AbstractPoint *&ret);
     protected:
       AbstractPoint *_father;
     };
index a3dcd389915212047ad09b1ee4d6ed1c4167f13e..07f1e6be66017bca8783d22fbed9783cc32cfd3a 100644 (file)
@@ -246,8 +246,8 @@ std::vector< std::list<Node *> > Bloc::splitIntoIndependantGraph() const
           ll.push_back(cur);
           //
           OutGate *og(cur->getOutGate());
-          set<InGate *> og2(og->edSetInGate());
-          for(set<InGate *>::const_iterator it2=og2.begin();it2!=og2.end();it2++)
+          list<InGate *> og2(og->edSetInGate());
+          for(list<InGate *>::const_iterator it2=og2.begin();it2!=og2.end();it2++)
             {
               Node *cur2((*it2)->getNode());
               if(cur2->_colour==White)
@@ -350,8 +350,8 @@ std::vector< std::pair<OutGate *, InGate *> > Bloc::getSetOfInternalCFLinks() co
   vector< pair<OutGate *, InGate *> > ret;
   for(list<Node *>::const_iterator iter=_setOfNode.begin();iter!=_setOfNode.end();iter++)
     {
-      set<InGate *> outCFLinksOfCurNode=(*iter)->_outGate.edSetInGate();
-      for(set<InGate *>::iterator iter2=outCFLinksOfCurNode.begin();iter2!=outCFLinksOfCurNode.end();iter2++)
+      list<InGate *> outCFLinksOfCurNode=(*iter)->_outGate.edSetInGate();
+      for(list<InGate *>::iterator iter2=outCFLinksOfCurNode.begin();iter2!=outCFLinksOfCurNode.end();iter2++)
         ret.push_back(pair<OutGate *, InGate *>(&(*iter)->_outGate,*iter2));
     }
   return ret;
@@ -490,8 +490,8 @@ void Bloc::performCFComputations(LinkInfo& info) const
   for(list<Node *>::const_iterator iter=_setOfNode.begin();iter!=_setOfNode.end();iter++)
     {
       Node* n1=*iter;
-      std::set<InGate *> ingates=n1->getOutGate()->edSetInGate();
-      for(std::set<InGate *>::const_iterator it2=ingates.begin();it2!=ingates.end();it2++)
+      std::list<InGate *> ingates=n1->getOutGate()->edSetInGate();
+      for(std::list<InGate *>::const_iterator it2=ingates.begin();it2!=ingates.end();it2++)
         {
           //CF link : n1 -> (*it2)->getNode()
           Node* n2=(*it2)->getNode();
@@ -856,9 +856,8 @@ void Bloc::findUselessLinksIn(const std::list< std::vector<Node *> >& res , Link
       set<Node *> searcher(iter2+1,(*whereToPeerAt).end());//to boost research
       for(;iter2!=((*whereToPeerAt).end()-2);iter2++)
         {
-          map<InGate *,bool>::iterator iter4;
-          map<InGate *,bool>& nexts=(*iter2)->getOutGate()->edMapInGate();
-          for(iter4=nexts.begin();iter4!=nexts.end();iter4++)
+          list< pair<InGate *,bool> >& nexts=(*iter2)->getOutGate()->edMapInGate();
+          for(list< pair<InGate *,bool> >::iterator iter4=nexts.begin();iter4!=nexts.end();iter4++)
             if((*iter4).first->getNode()!=*(iter2+1))
               if(searcher.find((*iter4).first->getNode())!=searcher.end())
                 info.pushUselessCFLink(*iter2,(*iter4).first->getNode());
index 18a0dfd76dded192fd69e0ed461b44d8b8bc0a38..7560f712492d06c922e4e929dd36e5a2fe3e1fd5 100644 (file)
@@ -101,8 +101,8 @@ namespace YACS
     template<>
     struct CFDirectionVisTraits<true>
     {
-      typedef std::map<InGate *,bool>::iterator Iterator;
-      typedef std::map<InGate *,bool>& Nexts;
+      typedef std::list< std::pair<InGate *,bool> >::iterator Iterator;
+      typedef std::list< std::pair<InGate *,bool> >& Nexts;
       static Nexts getNexts(Node *node) { return node->getOutGate()->edMapInGate(); }
     };
 
index 381d1eb71d7549aa9fa0f5d69c7f826a5ff25b6a..9678e09e351f0c22f284ec8fd2881c0b5252e705 100644 (file)
@@ -42,7 +42,7 @@ AbstractPoint *BlocPoint::findPointWithNode(Node *node)
 AbstractPoint *BlocPoint::getNodeAfter(Node *node)
 {
   OutGate *oug(node->getOutGate());
-  std::set<InGate *> fl(oug->edSetInGate());
+  std::list<InGate *> fl(oug->edSetInGate());
   if(fl.size()>=1)
     {
       AbstractPoint *ret(0);
index 008d3fc491e73586be86692d7e14f3cb3cf071c1..b03914f111cb1b06017b778cea1e2d48439fba6d 100644 (file)
@@ -180,8 +180,8 @@ void Node::setName(const std::string& name)
 set<Node *> Node::getOutNodes() const
 {
   set<Node *> ret;
-  set<InGate *> inGates=_outGate.edSetInGate();
-  for(set<InGate *>::iterator iter=inGates.begin();iter!=inGates.end();iter++)
+  list<InGate *> inGates=_outGate.edSetInGate();
+  for(list<InGate *>::iterator iter=inGates.begin();iter!=inGates.end();iter++)
     ret.insert((*iter)->getNode());
   return ret;
 }
index d2efbefba674bf4848fc9fc1e07f854f6498f1be..3daf4fac8ba926af7477bbe80e2d14ad907f2402 100644 (file)
@@ -23,6 +23,8 @@
 //#define _DEVDEBUG_
 #include "YacsTrace.hxx"
 
+#include <algorithm>
+
 using namespace YACS::ENGINE;
 using namespace std;
 
@@ -39,7 +41,7 @@ string OutGate::getNameOfTypeOfCurrentInstance() const
 
 void OutGate::exReset()
 {
-  for(map<InGate *, bool>::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
+  for(list< pair< InGate *, bool> >::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
     (*iter).second=false;
 }
 
@@ -53,7 +55,7 @@ void OutGate::exReset()
 void OutGate::exNotifyDone()
 {
   DEBTRACE("OutGate::exNotifyDone");
-  for(map<InGate *, bool>::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
+  for(list< pair<InGate *, bool> >::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
     (*iter).first->exNotifyFromPrecursor(this);
 }
 
@@ -63,7 +65,7 @@ void OutGate::exNotifyDone()
  */
 void OutGate::exNotifyFailed()
 {
-  for(map<InGate *, bool>::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
+  for(list< pair<InGate *, bool> >::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
     (*iter).first->exNotifyFailed();
 }
 
@@ -73,23 +75,32 @@ void OutGate::exNotifyFailed()
  */
 void OutGate::exNotifyDisabled()
 {
-  for(map<InGate *, bool>::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
+  for(list< pair<InGate *, bool> >::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
     (*iter).first->exNotifyDisabled();
 }
 
 void OutGate::edDisconnectAllLinksFromMe()
 {
-  for(map<InGate *, bool>::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
+  for(list< pair<InGate *, bool> >::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
     (*iter).first->edRemovePrecursor(this);
   _setOfInGate.clear();
 }
 
+class ItemCmp
+{
+private:
+  InGate *_itf;
+public:
+  ItemCmp(InGate *itf):_itf(itf) { }
+  bool operator()(const std::pair<InGate *,bool>& elt) const { return elt.first==_itf; }
+};
+
 bool OutGate::edAddInGate(InGate *inGate)
 {
   if(!isAlreadyInSet(inGate))
     {
       inGate->edAppendPrecursor(this);
-      _setOfInGate[inGate]=false;
+      _setOfInGate.push_back(std::pair<InGate *,bool>(inGate,false));
       modified();
       inGate->modified();
       return true;
@@ -98,17 +109,17 @@ bool OutGate::edAddInGate(InGate *inGate)
     return false;
 }
 
-std::set<InGate *> OutGate::edSetInGate() const
+std::list<InGate *> OutGate::edSetInGate() const
 {
-  set<InGate *> ret;
-  for(map<InGate *, bool>::const_iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
-    ret.insert((*iter).first);
+  list<InGate *> ret;
+  for(list< pair<InGate *, bool> >::const_iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end();iter++)
+    ret.push_back((*iter).first);
   return ret;
 }
 
 void OutGate::edRemoveInGate(InGate *inGate, bool coherenceWithInGate) throw(YACS::Exception)
 {
-  std::map< InGate* , bool >::iterator iter=_setOfInGate.find(inGate);
+  std::list< pair<InGate* , bool> >::iterator iter(std::find_if(_setOfInGate.begin(),_setOfInGate.end(),ItemCmp(inGate)));
   if(iter==_setOfInGate.end())
     throw Exception("InGate not already connected to OutGate");
   else
@@ -125,7 +136,7 @@ void OutGate::edRemoveInGate(InGate *inGate, bool coherenceWithInGate) throw(YAC
 void OutGate::edRemoveInGateOneWay(InGate *inGate)
 {
   bool found=false;
-  for(map<InGate *, bool>::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end() && !found;iter++)
+  for(list< pair<InGate *, bool> >::iterator iter=_setOfInGate.begin();iter!=_setOfInGate.end() && !found;iter++)
     if((*iter).first==inGate)
       {
         _setOfInGate.erase(iter);
@@ -138,7 +149,7 @@ void OutGate::edRemoveInGateOneWay(InGate *inGate)
 
 bool OutGate::isAlreadyInSet(InGate *inGate) const
 {
-  return _setOfInGate.find(inGate)!=_setOfInGate.end();
+  return find_if(_setOfInGate.begin(),_setOfInGate.end(),ItemCmp(inGate))!=_setOfInGate.end();
 }
 
 int OutGate::getNbOfInGatesConnected() const
index 869125af7b185978aecb14922613db42e6e9facf..af0ea241e92bc4ae2565bce0804d58688ba65c64 100644 (file)
@@ -24,8 +24,7 @@
 #include "Port.hxx"
 #include "Exception.hxx"
 
-#include <map>
-#include <set>
+#include <list>
 
 namespace YACS
 {
@@ -38,7 +37,7 @@ namespace YACS
     {
       friend class ElementaryNode;
     protected:
-      std::map<InGate *, bool> _setOfInGate;
+      std::list< std::pair< InGate *, bool > > _setOfInGate;
     public:
       static const char NAME[];
     public:
@@ -50,8 +49,8 @@ namespace YACS
       void exNotifyDisabled();
       void edDisconnectAllLinksFromMe();
       bool edAddInGate(InGate *inGate);
-      std::map<InGate *, bool>& edMapInGate() { return _setOfInGate; }
-      std::set<InGate *> edSetInGate() const;
+      std::list< std::pair< InGate *, bool> >& edMapInGate() { return _setOfInGate; }
+      std::list<InGate *> edSetInGate() const;
       void edRemoveInGate(InGate *inGate, bool coherenceWithInGate=true) throw(Exception);
       int getNbOfInGatesConnected() const;
       bool isAlreadyInSet(InGate *inGate) const;
index c6dc7c1c30505b8d7aa76dc06416310fedc82bd6..5df4abe352a9a07ec2e3b43e1027c0b129b29953 100644 (file)
@@ -797,8 +797,8 @@ void VisitorSaveSchema::writeControls(ComposedNode *node)
   for (list<Node*>::iterator ic = setOfChildren.begin(); ic != setOfChildren.end(); ++ic)
     {
       // --- Control links from direct descendant to nodes inside the bloc
-      set<InGate*> setOfInGates = (*ic)->getOutGate()->edSetInGate();
-      for (set<InGate*>::iterator ig = setOfInGates.begin(); ig != setOfInGates.end(); ++ig)
+      list<InGate*> setOfInGates = (*ic)->getOutGate()->edSetInGate();
+      for (list<InGate*>::iterator ig = setOfInGates.begin(); ig != setOfInGates.end(); ++ig)
         {
           Node *to = (*ig)->getNode();
           if (node->isInMyDescendance(to))
index 265ebad34c6cb23afcedda39fc84d54d0121b084..329bd38e8b3ca4cd503a6f2fcdd62a96e477cc72 100644 (file)
@@ -228,8 +228,8 @@ void  SceneBlocItem::getNodesInfo(YACS::ENGINE::ComposedNode *cnode)
 
     {
       OutGate *outGate = outNode->getOutGate();
-      set<InGate*> setOfInGate = outGate->edSetInGate();
-      set<InGate*>::const_iterator itin = setOfInGate.begin();
+      list<InGate*> setOfInGate = outGate->edSetInGate();
+      list<InGate*>::const_iterator itin = setOfInGate.begin();
       for (; itin != setOfInGate.end(); ++itin)
         {
           Node *inNode = (*itin)->getNode();
index 786d8f4d0125759517a2903cbdacd4e77a37c35f..84f1c5a5476136330c75039e1c23d58445a839ae 100644 (file)
@@ -902,7 +902,7 @@ void SubjectNode::saveLinks()
       Node* n2=_node;
       DEBTRACE(n1->getName()<< " " << n2->getName());
     }
-  std::set<InGate *>::const_iterator iti;
+  std::list<InGate *>::const_iterator iti;
   for(iti=singate.begin();iti != singate.end();iti++)
     {
       Node* n1=_node;
@@ -1076,7 +1076,7 @@ void SubjectNode::restoreLinks()
         }
     }
 
-  std::set<InGate *>::const_iterator it2;
+  std::list<InGate *>::const_iterator it2;
   for(it2=singate.begin();it2 != singate.end();it2++)
     {
       Node* n1=_node;
@@ -1649,8 +1649,8 @@ void SubjectComposedNode::loadLinks()
     {
       SubjectNode* sno = GuiContext::getCurrent()->_mapOfSubjectNode[*itn];
       OutGate* outgate = (*itn)->getOutGate();
-      std::set<InGate*> setIngate = outgate->edSetInGate();
-      std::set<InGate*>::const_iterator itg;
+      std::list<InGate*> setIngate = outgate->edSetInGate();
+      std::list<InGate*>::const_iterator itg;
       for(itg = setIngate.begin(); itg != setIngate.end(); ++itg)
         {
           Node* inNode = (*itg)->getNode();
index acc9eb4aae2d2568114fb65c04fc28795a15cad1..cf277eb36a6484e29a8ee1c577ab7822aa78fd03 100644 (file)
@@ -339,7 +339,7 @@ namespace YACS
       std::list<SubjectControlLink*> _listSubjectControlLink;
       int _execState;
       std::list<YACS::ENGINE::OutGate *> loutgate;
-      std::set<YACS::ENGINE::InGate *> singate;
+      std::list<YACS::ENGINE::InGate *> singate;
       std::vector< std::pair<YACS::ENGINE::OutPort *, YACS::ENGINE::InPort *> > dataLinks;
       std::vector< std::pair<YACS::ENGINE::OutPort *, YACS::ENGINE::InPort *> > dataflowLinks;
     };