16 using namespace Couenne;
24 std::set <DepNode *, compNode> *already_visited)
const {
27 for (std::set <DepNode *, compNode>::iterator i =
depList_ -> begin ();
31 printf (
"checking dependence of %d on %d\n", (*i) ->
Index (), xi);
35 if (!already_visited ||
36 (already_visited -> find (*i) == already_visited ->
end ())) {
38 if (((*i) ->
Index () == xi) ||
40 ((*i) ->
depends (xi, recursive, already_visited))))
43 printf (
"%d <- ", (*i) ->
Index ());
48 if (already_visited) {
49 already_visited -> insert (*i);
71 printf (
"detected cycle in creating order, exiting\n");
77 for (std::set <DepNode *, compNode>::iterator i =
depList_ -> begin();
79 if ((*i) ->
Order () == -1)
83 order_ = g -> Counter () ++;
95 printf (
"("); fflush (stdout);
97 for (std::set <DepNode *, compNode>::iterator i =
depList_ -> begin();
100 (*i) ->
print (indent + 1, descend);
101 else printf (
"%d ", (*i) ->
Index ());
103 printf (
") "); fflush (stdout);
111 for (std::set <DepNode *, compNode>::iterator i =
depList_ -> begin();
114 if ((*i) ->
Index () == oldVarNode ->
Index ()) {
132 std::set <DepNode *, compNode>::iterator i =
vertices_ . find (el);
146 std::set <DepNode *, compNode>::iterator i =
vertices_ . find (el);
150 aux -> Image () -> fillDepSet (el -> DepList (),
this);
152 aux -> Image () -> fillDepSet ((*i) -> DepList (),
this);
162 std::set <DepNode *, compNode>::iterator i =
vertices_ . find (el);
173 std::set <DepNode *, compNode>::iterator i =
vertices_. find (el);
177 std::set <DepNode *, compNode> already_visited;
178 return (*i) ->
depends (xi, recursive, &already_visited);
187 for (std::set <DepNode *, compNode>::iterator i =
vertices_. begin();
196 printf (
"Dependence graph: \n");
197 for (std::set <DepNode *, compNode>::iterator i =
vertices_. begin();
199 (*i) ->
print (0, descend);
209 std::set <DepNode *, compNode>::iterator i =
vertices_ . find (el);
211 ret = (i ==
vertices_.end ()) ? NULL : (*i);
223 *copyOld =
new DepNode (oldVar),
224 *copyNew =
new DepNode (newVar);
226 std::set <DepNode *, compNode>::iterator
230 for (std::set <DepNode *, compNode>::iterator i =
vertices_. begin();
std::set< DepNode *, compNode > vertices_
set of variable nodes
void erase(exprVar *)
delete element
int order_
order in which this variable should be updated, evaluated, etc.
void createOrder(DepGraph *)
assign numbering to all nodes of graph
vertex of a dependence graph.
void createOrder()
assign numbering to all nodes of graph
DepNode * lookup(int index)
search for node in vertex set
void insert(exprVar *)
insert new variable if new
bool depends(int, int, bool=false)
does w depend on x?
void replaceIndex(DepNode *oldVarNode, DepNode *newVarNode)
replace the index of a variable with another in the entire graph.
void print(int=0, bool descend=false) const
debugging procedure
void fint fint fint real fint real real real real real real * g
bool depends(int xi, bool=false, std::set< DepNode *, compNode > *already_visited=NULL) const
does this variable depend on variable with index xi?
int index_
index of variable associated with node
int Index() const
return index of this variable
int Order() const
return index of this variable
void replaceIndex(int oldVar, int newVar)
replace, throughout the whole graph, the index of a variable with another in the entire graph...
std::set< DepNode *, compNode > * depList_
index nodes on which this one depends (forward star in dependence graph)
void print(bool descend=false)
debugging procedure