26 if ((uL.
size > 0) && (vL.
size > 0)) {
28 for (i = 0; (e = uL.
list[i]); i++)
32 for (i = 0; (e = vL.
list[i]); i++)
63 for (
size_t i = 0; i <
L->size; i++)
76 fprintf(stderr,
"duplicate fast edge\n");
83 fprintf(stderr,
"duplicate fast edge\n");
97 for (
size_t i = 0; i <
L->size; i++) {
98 if (
L->list[i] == e) {
100 L->list[i] =
L->list[
L->size];
239 snprintf(buf,
sizeof(buf),
"V%p", n);
251 for (i = 0; (e =
ND_out(n).list[i]); i++) {
255 for (j = 0; (f =
ND_in(w).list[j]); j++)
261 fprintf(stderr,
" ) (");
262 for (i = 0; (e =
ND_in(n).list[i]); i++) {
266 for (j = 0; (f =
ND_out(w).list[j]); j++)
272 fprintf(stderr,
" )\n");
Memory allocation wrappers that exit on failure.
static void * gv_alloc(size_t size)
Agraph_t * dot_root(void *p)
static void safe_list_append(edge_t *e, elist *L)
void zapinlist(elist *L, edge_t *e)
void delete_fast_edge(edge_t *e)
edge_t * find_flat_edge(node_t *u, node_t *v)
edge_t * new_virtual_edge(node_t *u, node_t *v, edge_t *orig)
static UNUSED node_t * find_fast_node(graph_t *g, node_t *n)
static edge_t * ffe(node_t *u, elist uL, node_t *v, elist vL)
void fast_node(graph_t *g, Agnode_t *n)
node_t * virtual_node(graph_t *g)
void flat_edge(graph_t *g, edge_t *e)
edge_t * find_fast_edge(node_t *u, node_t *v)
void other_edge(edge_t *e)
void delete_flat_edge(edge_t *e)
edge_t * fast_edge(edge_t *e)
static void basic_merge(edge_t *e, edge_t *rep)
void merge_oneway(edge_t *e, edge_t *rep)
void delete_fast_node(graph_t *g, node_t *n)
void safe_other_edge(edge_t *e)
edge_t * virtual_edge(node_t *u, node_t *v, edge_t *orig)
void agwarningf(const char *fmt,...)
#define GD_has_flat_edges(g)
char * agnameof(void *)
returns a string descriptor for the object.
#define AGTYPE(obj)
returns AGRAPH, AGNODE, or AGEDGE depending on the type of the object
Agraph_t * agroot(void *obj)
Agrec_t * data
stores programmer-defined data, access with AGDATA
#define elist_append(item, L)
#define alloc_elist(n, L)
abstraction for squashing compiler warnings for unused symbols