-// Copyright (C) 2006-2014 CEA/DEN, EDF R&D
+// Copyright (C) 2006-2016 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
//#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