}
}
+#ifdef WITH_CGRAPH
/* realFillRanks:
* The structures in crossing minimization and positioning require
* that clusters have some node on each rank. This function recursively
sg = realFillRanks (g, rnks, rnks_sz, NULL);
free (rnks);
}
+#endif
static void init_mincross(graph_t * g)
{
TE_list = N_NEW(size, edge_t *);
TI_list = N_NEW(size, int);
mincross_options(g);
+#ifdef WITH_CGRAPH
if (GD_flags(g) & NEW_RANK)
fillRanks (g);
+#endif
class2(g);
decompose(g, 1);
allocate_ranks(g);
#include "dot.h"
static void dot1_rank(graph_t * g, aspect_t* asp);
+#ifdef WITH_CGRAPH
static void dot2_rank(graph_t * g, aspect_t* asp);
+#endif
static void
renewlist(elist * L)
void dot_rank(graph_t * g, aspect_t* asp)
{
+#ifdef WITH_CGRAPH
if (agget (g, "newrank")) {
GD_flags(g) |= NEW_RANK;
dot2_rank (g, asp);
}
else
+#endif
dot1_rank (g, asp);
}
}
#endif
+#ifdef WITH_CGRAPH
/* new ranking code:
* Allows more constraints
* Copy of level.c in dotgen2
}
}
-#ifdef WITH_CGRAPH
static void my_init_graph(Agraph_t *g, Agobj_t *graph, void *arg)
{ int *sz = arg; agbindrec(graph,"level graph rec",sz[0],TRUE); }
static void my_init_node(Agraph_t *g, Agobj_t *node, void *arg)
sizeof(Agnodeinfo_t),
sizeof(Agedgeinfo_t)
};
-#endif
void dot2_rank(graph_t * g, aspect_t* asp)
{
#endif
Last_node = NULL;
graph_t *Xg = agopen("level assignment constraints", Agstrictdirected, 0);
-#ifdef WITH_CGRAPH
agbindrec(Xg,"level graph rec",sizeof(Agraphinfo_t),TRUE);
agpushdisc(Xg,&mydisc,infosizes);
-#endif
edgelabel_ranks(g);
agclose(Xg);
}
+#endif /* WITH_CGRAPH */
/* end of new ranking code
*/