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)
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)
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++)
#include "YACSlibEngineExport.hxx"
-#include <set>
#include <list>
#include <vector>
#include <string>
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;
};
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)
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;
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();
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());
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(); }
};
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);
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;
}
//#define _DEVDEBUG_
#include "YacsTrace.hxx"
+#include <algorithm>
+
using namespace YACS::ENGINE;
using namespace std;
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;
}
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);
}
*/
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();
}
*/
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;
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
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);
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
#include "Port.hxx"
#include "Exception.hxx"
-#include <map>
-#include <set>
+#include <list>
namespace YACS
{
{
friend class ElementaryNode;
protected:
- std::map<InGate *, bool> _setOfInGate;
+ std::list< std::pair< InGate *, bool > > _setOfInGate;
public:
static const char NAME[];
public:
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;
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))
{
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();
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;
}
}
- std::set<InGate *>::const_iterator it2;
+ std::list<InGate *>::const_iterator it2;
for(it2=singate.begin();it2 != singate.end();it2++)
{
Node* n1=_node;
{
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();
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;
};