23 std::list<event_idt> &old_path,
24 std::set<unsigned> &edges)
29 std::list<event_idt>::const_iterator it=old_path.begin();
30 std::list<event_idt>::const_iterator next_it=it;
32 for( ; next_it!=old_path.end() && it!=old_path.end(); ++it, ++next_it)
39 else if(egraph.
po_out(next).empty())
45 for(wmm_grapht::edgest::const_iterator
46 next_it=egraph.
po_out(next).begin();
47 next_it!=egraph.
po_out(next).end();
54 old_path.push_back(next_it->first);
65 std::list<event_idt> &old_path)
70 std::list<event_idt>::const_iterator it=old_path.begin();
71 std::list<event_idt>::const_iterator next_it=it;
73 for( ; next_it!=old_path.end() && it!=old_path.end(); ++it, ++next_it)
80 else if(egraph.
po_out(next).empty())
86 for(wmm_grapht::edgest::const_iterator
87 next_it=egraph.
po_out(next).begin();
88 next_it!=egraph.
po_out(next).end();
95 old_path.push_back(next_it->first);
105 std::list<event_idt> &old_path,
106 std::set<unsigned> &edges,
110 assert(!old_path.empty());
114 <<
" --...--> " << next
122 bool no_other_pos =
true;
123 for(wmm_grapht::edgest::const_iterator it=
124 egraph.
po_out(next).begin();
125 it!=egraph.
po_out(next).end();
129 no_other_pos =
false;
133 if(egraph.
po_out(next).empty() || no_other_pos)
136 std::list<event_idt>::const_iterator it=old_path.begin();
137 std::list<event_idt>::const_iterator next_it=it;
139 for( ; next_it!=old_path.end() && it!=old_path.end(); ++it, ++next_it)
148 assert(it!=old_path.end());
152 for(wmm_grapht::edgest::const_iterator
153 next_it=egraph.
po_out(next).begin();
154 next_it!=egraph.
po_out(next).end();
157 old_path.push_back(next_it->first);
167 std::list<event_idt> &old_path)
170 assert(old_path.size() > 0);
177 bool no_other_pos =
true;
178 for(wmm_grapht::edgest::const_iterator it=
179 egraph.
po_out(next).begin();
180 it!=egraph.
po_out(next).end();
184 no_other_pos =
false;
188 if(egraph.
po_out(next).empty() || no_other_pos)
191 std::list<event_idt>::const_iterator it=old_path.begin();
192 std::list<event_idt>::const_iterator next_it=it;
194 for( ; next_it!=old_path.end() && it!=old_path.end(); ++it, ++next_it)
203 assert(it!=old_path.end());
207 for(wmm_grapht::edgest::const_iterator
208 next_it=egraph.
po_out(next).begin();
209 next_it!=egraph.
po_out(next).end();
212 old_path.push_back(next_it->first);
222 std::list<event_idt> &old_path,
223 std::set<unsigned> &edges,
227 assert(old_path.size() > 0);
230 << old_path.front() <<
" --...--> " << next <<
messaget::eom;
237 bool no_other_pos =
true;
238 for(wmm_grapht::edgest::const_iterator it=
239 egraph.
po_in(next).begin();
240 it!=egraph.
po_in(next).end();
244 no_other_pos =
false;
248 if(egraph.
po_in(next).empty() || no_other_pos)
251 std::list<event_idt>::const_iterator it=old_path.begin();
252 std::list<event_idt>::const_iterator next_it=it;
254 for( ; next_it!=old_path.end() && it!=old_path.end(); ++it, ++next_it)
263 assert(it!=old_path.end());
267 for(wmm_grapht::edgest::const_iterator
268 next_it=egraph.
po_in(next).begin();
269 next_it!=egraph.
po_in(next).end();
272 old_path.push_back(next_it->first);
282 std::list<event_idt> &old_path)
285 assert(old_path.size() > 0);
292 bool no_other_pos =
true;
293 for(wmm_grapht::edgest::const_iterator it=
294 egraph.
po_in(next).begin();
295 it!=egraph.
po_in(next).end();
299 no_other_pos =
false;
304 if(egraph.
po_in(next).empty() || no_other_pos)
307 std::list<event_idt>::const_iterator it=old_path.begin();
308 std::list<event_idt>::const_iterator next_it=it;
310 for( ; next_it!=old_path.end() && it!=old_path.end(); ++it, ++next_it)
319 assert(it!=old_path.end());
323 for(wmm_grapht::edgest::const_iterator
324 next_it=egraph.
po_in(next).begin();
325 next_it!=egraph.
po_in(next).end();
328 old_path.push_back(next_it->first);
337 std::set<unsigned> &edges)
345 if(list_po_out.find(e.
second)==list_po_out.end())
351 for(wmm_grapht::edgest::const_iterator
356 std::list<event_idt> new_path;
357 new_path.push_back(e.
first);
358 new_path.push_back(next_it->first);
369 throw "BTWN definition not selected!";
381 std::set<unsigned> &edges)
403 if(!egraph.
po_in(first).empty())
405 for(wmm_grapht::edgest::const_iterator
406 next_it=egraph.
po_in(first).begin();
407 next_it!=egraph.
po_in(first).end();
410 std::list<event_idt> new_path;
411 new_path.push_back(first);
412 new_path.push_back(next_it->first);
417 if(!egraph.
po_out(second).empty())
419 for(wmm_grapht::edgest::const_iterator
420 next_it=egraph.
po_out(second).begin();
421 next_it!=egraph.
po_out(second).end();
424 std::list<event_idt> new_path;
425 new_path.push_back(second);
426 new_path.push_back(next_it->first);
436 std::set<unsigned> &edges)
457 if(!egraph.
po_in(first).empty())
459 for(wmm_grapht::edgest::const_iterator
460 next_it=egraph.
po_in(first).begin();
461 next_it!=egraph.
po_in(first).end();
464 std::list<event_idt> new_path;
465 new_path.push_back(first);
466 new_path.push_back(next_it->first);
471 if(!egraph.
po_out(second).empty())
473 for(wmm_grapht::edgest::const_iterator
474 next_it=egraph.
po_out(second).begin();
475 next_it!=egraph.
po_out(second).end();
478 std::list<event_idt> new_path;
479 new_path.push_back(second);
480 new_path.push_back(next_it->first);
std::map< edget, unsigned > & map_from_e
bool has_po_edge(event_idt i, event_idt j) const
static mstreamt & eom(mstreamt &m)
void CT_not_powr(const edget &e, std::set< unsigned > &edges)
const wmm_grapht::edgest & po_out(event_idt n) const
void CT(const edget &e, std::set< unsigned > &edges)
event_grapht::critical_cyclet::delayt edget
fence_insertert & fence_inserter
unsigned add_edge(const edget &e)
const wmm_grapht::edgest & po_in(event_idt n) const
wmm_grapht::node_indext event_idt
void graph_explore(event_grapht &graph, event_idt next, event_idt end, std::list< event_idt > &old_path, std::set< unsigned > &edges)
void const_graph_explore(event_grapht &graph, event_idt next, event_idt end, std::list< event_idt > &old_path)
void graph_explore_BC(event_grapht &egraph, event_idt next, std::list< event_idt > &old_path, std::set< unsigned > &edges, bool porw)
graph visitor for computing edges involved for fencing
ILP construction for all cycles and resolution.
void graph_explore_AC(event_grapht &egraph, event_idt next, std::list< event_idt > &old_path, std::set< unsigned > &edges, bool porw)
instrumentert & instrumenter
void const_graph_explore_BC(event_grapht &egraph, event_idt next, std::list< event_idt > &old_path)
void const_graph_explore_AC(event_grapht &egraph, event_idt next, std::list< event_idt > &old_path)
void PT(const edget &e, std::set< unsigned > &edges)
std::set< event_idt > visited_nodes