84 for (i = lpos + 1; i <= rpos; i++) {
101 for (k = 0; (f =
ND_in(
left).list[k]); k++)
161 agerrorf(
"rebuild_vlists: lead is null for rank %d\n", r);
165 agerrorf(
"rebuild_vlists: rank lead %s not in order %d of rank %d\n",
171 for (i = 0; i <
GD_rank(g)[r].n; i++) {
205 int c, r, leftpos, rightpos;
211 for (r = 1;
GD_rank(g)[r + 1].n; r++) {
212 for (leftpos = 0; leftpos <
GD_rank(g)[r].n; leftpos++) {
216 for (rightpos = leftpos + 1; rightpos <
GD_rank(g)[r].n;
222 if (rightpos - leftpos > 1)
228 for (leftpos = 0; leftpos <
GD_rank(g)[r].n; leftpos++) {
232 for (rightpos = leftpos + 1; rightpos <
GD_rank(g)[r].n;
238 if (rightpos - leftpos > 1)
245 agerr(
AGPREV,
"concentrate=true may not work correctly.\n");
static int rebuild_vlists(graph_t *g)
static bool bothdowncandidates(node_t *u, node_t *v)
static bool downcandidate(node_t *v)
static bool upcandidate(node_t *v)
static bool bothupcandidates(node_t *u, node_t *v)
static void infuse(graph_t *g, node_t *n)
void dot_concentrate(graph_t *g)
static bool samedir(edge_t *e, edge_t *f)
static void mergevirtual(graph_t *g, int r, int lpos, int rpos, int dir)
Agraph_t * dot_root(void *p)
void delete_fast_node(Agraph_t *, Agnode_t *)
void dot_scan_ranks(graph_t *g)
Agedge_t * virtual_edge(Agnode_t *, Agnode_t *, Agedge_t *)
int portcmp(port p0, port p1)
void delete_fast_edge(Agedge_t *)
void merge_oneway(Agedge_t *, Agedge_t *)
#define ED_conc_opp_flag(e)
Agedge_t * agfstout(Agraph_t *g, Agnode_t *n)
Agedge_t * agnxtout(Agraph_t *g, Agedge_t *e)
void agwarningf(const char *fmt,...)
void agerrorf(const char *fmt,...)
int agerr(agerrlevel_t level, const char *fmt,...)
Agnode_t * agnxtnode(Agraph_t *g, Agnode_t *n)
Agnode_t * agfstnode(Agraph_t *g)
char * agnameof(void *)
returns a string descriptor for the object.
int agcontains(Agraph_t *, void *obj)
returns non-zero if obj is a member of (sub)graph