void rangeGraph(char *inName) /* rangeGraph - test ideas about graph that tracks possible distance ranges. */ { struct rgi *rgiList, *rgi; struct diGraph *graph = dgNew(); boolean ok; /* Read in range list and add all nodes to graph. */ rgiList = readRgi(inName); for (rgi = rgiList; rgi != NULL; rgi = rgi->next) { maybeMakeNode(graph, rgi->a); maybeMakeNode(graph, rgi->b); } for (rgi = rgiList; rgi != NULL; rgi = rgi->next) { struct dgNode *a, *b; a = dgFindNode(graph, rgi->a); b = dgFindNode(graph, rgi->b); ok = tryAddingRangeEdge(graph, a, b, rgi->minDistance, rgi->maxDistance); printf("Added %s->%s min %d, max %d. %s\n", rgi->a, rgi->b, rgi->minDistance, rgi->maxDistance, (ok ? "ok" : "conflict") ); } }
struct dgNode *dgFindNumberedNode(struct diGraph *dg, int id) /* Find node given number. */ { char buf[16]; sprintf(buf, "%d", id); return dgFindNode(dg, buf); }
void maybeMakeNode(struct diGraph *graph, char *nodeName) /* Make node in graph if not there already. */ { if (!dgFindNode(graph, nodeName)) { struct nodeRange *r; AllocVar(r); dgAddNode(graph, nodeName, r); } }