40 mutable std::map<Node *,std::set<Node *> > *
_fwLinks;
42 mutable std::map<Node *,std::set<Node *> > *
_bwLinks;
47 Bloc(
const std::string& name);
50 int getNumberOfCFLinks()
const;
51 void init(
bool start=
true);
52 void getReadyTasks(std::vector<Task *>& tasks);
55 bool edAddChild(
Node *DISOWNnode) ;
56 void edRemoveChild(
Node *node) ;
59 std::vector< std::list<Node *> > splitIntoIndependantGraph()
const;
60 Node *getChildByShortName(
const std::string& name)
const ;
61 virtual void writeDot(std::ostream &os)
const;
63 template<
bool direction>
64 void findAllPathsStartingFrom(
Node *start, std::list< std::vector<Node *> >& vec, std::map<
Node *, std::set<Node *> >& accelStr)
const;
65 template<
bool direction>
66 void findAllNodesStartingFrom(
Node *start, std::set<Node *>& result, std::map<
Node *, std::set<Node *> >& accelStr,
LinkInfo& info)
const;
67 virtual std::string
typeName() {
return "YACS__ENGINE__Bloc"; }
68 int getMaxLevelOfParallelism()
const;
70 void removeRecursivelyRedundantCL();
75 bool areAllSubNodesFinished()
const;
76 bool areAllSubNodesDone()
const;
77 bool isNameAlreadyUsed(
const std::string& name)
const;
78 void checkNoCyclePassingThrough(
Node *node) ;
79 std::vector< std::pair<OutGate *, InGate *> > getSetOfInternalCFLinks()
const;
82 void initComputation()
const;
83 void performCFComputationsOnlyOneLevel(
LinkInfo& info)
const;
84 void performCFComputations(
LinkInfo& info)
const;
85 void destructCFComputations(
LinkInfo& info)
const;
86 void checkControlDependancy(
OutPort *start,
InPort *end,
bool cross,
87 std::map <
ComposedNode *, std::list < OutPort * >, SortHierarc >& fw,
88 std::vector<OutPort *>& fwCross,
89 std::map<
ComposedNode *, std::list < OutPort *>, SortHierarc >& bw,
91 bool areLinked(
Node *start,
Node *end,
bool fw)
const;
92 bool arePossiblyRunnableAtSameTime(
Node *start,
Node *end)
const;
93 void checkCFLinks(
const std::list<OutPort *>& starts,
InputPort *end,
unsigned char& alreadyFed,
bool direction,
LinkInfo& info)
const;
94 static void verdictForOkAndUseless1(
const std::map<
Node *,std::list <OutPort *> >& pool,
InputPort *end,
const std::vector<Node *>& candidates,
95 unsigned char& alreadyFed,
bool direction,
LinkInfo& info);
96 static void verdictForCollapses(
const std::map<
Node *,std::list <OutPort *> >& pool,
InputPort *end,
const std::set<Node *>& candidates,
97 unsigned char& alreadyFed,
bool direction,
LinkInfo& info);
98 void seekOkAndUseless1(std::vector<Node *>& okAndUseless1, std::set<Node *>& allNodes)
const;
99 void seekUseless2(std::vector<Node *>& useless2, std::set<Node *>& allNodes)
const;
101 std::list< AbstractPoint * > analyzeParallelism()
const;
102 static void findUselessLinksIn(
const std::list< std::vector<Node *> >& res ,
LinkInfo& info);
103 template<
bool direction>
104 static unsigned appendIfAlreadyFound(std::list< std::vector<Node *> >& res,
const std::vector<Node *>& startRes,
Node *node, std::map<
Node *, std::set<Node *> >& fastFinder);
105 static void updateWithNewFind(
const std::vector<Node *>& path, std::map<
Node *, std::set<Node *> >& fastFinder);
108 template<
bool direction>
116 typedef std::list< std::pair<InGate *,bool> >::iterator
Iterator;
117 typedef std::list< std::pair<InGate *,bool> >&
Nexts;
125 typedef std::list< std::pair<OutGate *,bool> >::iterator
Iterator;
126 typedef std::list< std::pair<OutGate *,bool> >&
Nexts;
134 template<
bool direction>
137 std::map<Node *, std::set<Node *> >::iterator iter=fastFinder.find(node);
138 if(iter==fastFinder.end())
141 std::vector<std::pair<std::set<Node *>::iterator, std::set<Node *>::iterator > > li;
142 std::pair<std::set<Node *>::iterator, std::set<Node *>::iterator> ipr(((*iter).second).begin(),((*iter).second).end());
144 std::vector<Node *> work(startRes);
145 std::list< std::vector<Node *> >::iterator where=res.end(); where--;
146 std::list< std::vector<Node *> >::iterator updates=where;
149 if(li.back().first!=li.back().second)
151 work.push_back(*(li.back().first));
154 where=res.insert(where,work);
161 std::set<Node *>& s=fastFinder[*(li.back().first)];
162 std::pair<std::set<Node *>::iterator, std::set<Node *>::iterator> pr(s.begin(),s.end());
175 for(
unsigned i=0;
i<ret;
i++,updates--)
180 template<
bool direction>
182 std::map<
Node *, std::set<Node *> >& accelStr,
LinkInfo& info)
const
184 std::list< std::vector<Node *> > li;
185 findAllPathsStartingFrom<direction>(start,li,accelStr);
186 for(std::list< std::vector<Node *> >::const_iterator iter=li.begin();iter!=li.end();iter++)
187 for(std::vector<Node *>::const_iterator iter2=(*iter).begin()+1;iter2!=(*iter).end();iter2++)
188 result.insert(*iter2);
200 template<
bool direction>
202 std::map<
Node *, std::set<Node *> >& accelStr)
const
208 vec.push_back(std::vector<Node *>());
210 std::list< std::vector<Node *> >::iterator curLine=vec.begin();
213 (*curLine).push_back(current);
219 vec.push_back(std::vector<Node *>((*curLine)));
226 current=(*curLine)[idInCase];
227 (*curLine).pop_back();
228 (*curLine).pop_back();
234 appendIfAlreadyFound<direction>(vec,(*curLine),current,accelStr);
235 curLine=vec.end(); curLine--;
240 current=(*curLine)[idInCase];
241 (*curLine).pop_back();
242 (*curLine).pop_back();
252 (*curLine).pop_back();
256 current=(*curLine)[idInCase];
257 (*curLine).pop_back();
263 current=(*iter).first->getNode();
#define YACSLIBENGINE_EXPORT
Composed node to group elementary and composed nodes.
std::list< Node * > _setOfNode
std::list< Node * > edGetDirectDescendants() const
static unsigned appendIfAlreadyFound(std::list< std::vector< Node * > > &res, const std::vector< Node * > &startRes, Node *node, std::map< Node *, std::set< Node * > > &fastFinder)
virtual std::string typeName()
void findAllNodesStartingFrom(Node *start, std::set< Node * > &result, std::map< Node *, std::set< Node * > > &accelStr, LinkInfo &info) const
static void updateWithNewFind(const std::vector< Node * > &path, std::map< Node *, std::set< Node * > > &fastFinder)
std::map< Node *, std::set< Node * > > * _bwLinks
For internal calculations.
void findAllPathsStartingFrom(Node *start, std::list< std::vector< Node * > > &vec, std::map< Node *, std::set< Node * > > &accelStr) const
std::map< Node *, std::set< Node * > > * _fwLinks
For internal calculations.
static void findUselessLinksIn(const std::list< std::vector< Node * > > &res, LinkInfo &info)
void initComputation() const
std::list< Node * > getChildren() const
Base class for all composed nodes.
std::list< std::pair< OutGate *, bool > > & edMapOutGate()
Class that deal with list of semantics links for high level analysis.
Base class for all nodes.
std::list< std::pair< InGate *, bool > > & edMapInGate()
std::list< std::pair< OutGate *, bool > > & Nexts
static Nexts getNexts(Node *node)
std::list< std::pair< OutGate *, bool > >::iterator Iterator
std::list< std::pair< InGate *, bool > > & Nexts
std::list< std::pair< InGate *, bool > >::iterator Iterator
static Nexts getNexts(Node *node)