37 for (i = pos - d + 1; i <
GD_rank(root)[r].n; i++) {
46 for (i =
GD_rank(root)[r].n - 1; i > pos; i--) {
51 for (i = pos + 1; i < pos + d; i++)
150 if ((u == from) && (v == to))
199 }
else if (e != fe) {
230 int i, d, r, pos, ipos;
243 for (i = 0; i <
GD_rank(subg)[r].n; i++) {
253 GD_rank(root)[r].valid =
false;
256 GD_rank(root)[r].valid =
false;
271 while ((e =
ND_out(v).list[0])) {
276 while ((e =
ND_in(v).list[0])) {
297 ints_t scratch = {0};
328 "%s was already in a rankset, deleted from cluster %s\n",
338 for (orig =
agfstout(clust, n); orig;
Memory allocation wrappers that exit on failure.
static void * gv_calloc(size_t nmemb, size_t size)
void merge_chain(graph_t *g, edge_t *e, edge_t *f, bool update_count)
bool mergeable(edge_t *e, edge_t *f)
void UF_setname(node_t *u, node_t *v)
void UF_singleton(node_t *u)
Agraph_t * dot_root(void *p)
void other_edge(Agedge_t *)
void delete_fast_node(Agraph_t *, Agnode_t *)
Agedge_t * virtual_edge(Agnode_t *, Agnode_t *, Agedge_t *)
void safe_other_edge(Agedge_t *)
void enqueue_neighbors(node_queue_t *q, node_t *n0, int pass)
void allocate_ranks(Agraph_t *)
void flat_edge(Agraph_t *, Agedge_t *)
void fast_node(Agraph_t *, Agnode_t *)
void delete_fast_edge(Agedge_t *)
void merge_oneway(Agedge_t *, Agedge_t *)
int ports_eq(edge_t *, edge_t *)
Agedge_t * find_flat_edge(Agnode_t *, Agnode_t *)
void install_in_rank(Agraph_t *, Agnode_t *)
Agedge_t * find_fast_edge(Agnode_t *, Agnode_t *)
void build_ranks(Agraph_t *, int, ints_t *)
Agnode_t * virtual_node(Agraph_t *)
Agedge_t * agfstout(Agraph_t *g, Agnode_t *n)
Agedge_t * agnxtedge(Agraph_t *g, Agedge_t *e, Agnode_t *n)
Agedge_t * agnxtout(Agraph_t *g, Agedge_t *e)
Agedge_t * agfstedge(Agraph_t *g, Agnode_t *n)
void agwarningf(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 agdelete(Agraph_t *g, void *obj)
deletes object. Equivalent to agclose, agdelnode, and agdeledge for obj being a graph,...
int agcontains(Agraph_t *, void *obj)
returns non-zero if obj is a member of (sub)graph
Agraph_t * agroot(void *obj)
static void mark_lowcluster_basic(Agraph_t *g)
void expand_cluster(graph_t *subg)
static void merge_ranks(graph_t *subg)
static void map_path(node_t *from, node_t *to, edge_t *orig, edge_t *ve, int type)
static void make_slots(graph_t *root, int r, int pos, int d)
static void remove_rankleaders(graph_t *g)
static void interclexp(graph_t *subg)
void install_cluster(graph_t *g, node_t *n, int pass, node_queue_t *q)
static node_t * clone_vn(graph_t *g, node_t *vn)
static node_t * map_interclust_node(node_t *n)
void mark_lowclusters(Agraph_t *root)
void build_skeleton(graph_t *g, graph_t *subg)
void mark_clusters(graph_t *g)
static void make_interclust_chain(node_t *from, node_t *to, edge_t *orig)
Agrec_t * data
stores programmer-defined data, access with AGDATA