]> granicus.if.org Git - graphviz/commitdiff
Commit version of gvpr using the cgraph library. The relevant
authorerg <devnull@localhost>
Wed, 9 Jan 2008 22:36:19 +0000 (22:36 +0000)
committererg <devnull@localhost>
Wed, 9 Jan 2008 22:36:19 +0000 (22:36 +0000)
code is wrapped in #ifdef USE_CGRAPH.

cmd/gvpr/gvpr.c

index cc2a4f611e4f16694f73f0f3fb76a8985d2289d6..1421ece4f046249092e7da46cee2c30ac79328b6 100644 (file)
 #include       <unistd.h>
 #endif
 #include <gprstate.h>
+#ifdef USE_CGRAPH
+#include <cgraph.h>
+#else
 #include <agraph.h>
+#endif
 #include <ingraphs.h>
 #include <compile.h>
 #include <queue.h>
@@ -371,7 +375,11 @@ static Agnode_t *nextNode(Gpr_t * state, nodestream * nodes)
     if (state->tvroot != nodes->oldroot) {
        np = nodes->oldroot = state->tvroot;
     } else if (nodes->prev) {
+#ifdef USE_CGRAPH
+       np = nodes->prev = agnxtnode(state->curgraph, nodes->prev);
+#else
        np = nodes->prev = agnxtnode(nodes->prev);
+#endif
     } else {
        np = nodes->prev = agfstnode(state->curgraph);
     }
@@ -384,8 +392,13 @@ static Agnode_t *nextNode(Gpr_t * state, nodestream * nodes)
 #define PUSH(x)  (((x)->iu.integer)|=2)
 #define POP(x)  (((x)->iu.integer)&=(~2))
 
+#ifdef USE_CGRAPH
+typedef Agedge_t *(*fstedgefn_t) (Agraph_t*, Agnode_t *);
+typedef Agedge_t *(*nxttedgefn_t) (Agraph_t*, Agedge_t *, Agnode_t *);
+#else
 typedef Agedge_t *(*fstedgefn_t) (Agnode_t *);
 typedef Agedge_t *(*nxttedgefn_t) (Agedge_t *, Agnode_t *);
+#endif
 
 typedef struct {
     fstedgefn_t fstedge;
@@ -403,6 +416,9 @@ static void travBFS(Gpr_t * state, comp_prog * xprog)
     ndata *nd;
     Agnode_t *n;
     Agedge_t *cure;
+#ifdef USE_CGRAPH
+    Agraph_t* g = state->curgraph;
+#endif
 
     q = mkQueue();
     nodes.oldroot = 0;
@@ -418,7 +434,11 @@ static void travBFS(Gpr_t * state, comp_prog * xprog)
            MARK(nd);
            POP(nd);
            evalNode(state, xprog, n);
+#ifdef USE_CGRAPH
+           for (cure = agfstedge(g, n); cure; cure = agnxtedge(g, cure, n)) {
+#else
            for (cure = agfstedge(n); cure; cure = agnxtedge(cure, n)) {
+#endif
                nd = nData(cure->node);
                if (MARKED(nd)) continue;
                evalEdge(state, xprog, cure);
@@ -461,10 +481,17 @@ static void travDFS(Gpr_t * state, comp_prog * xprog, trav_fns * fns)
        evalNode(state, xprog, n);
        more = 1;
        while (more) {
+#ifdef USE_CGRAPH
+           if (cure)
+               cure = fns->nxtedge(state->curgraph, cure, curn);
+           else
+               cure = fns->fstedge(state->curgraph, curn);
+#else
            if (cure)
                cure = fns->nxtedge(cure, curn);
            else
                cure = fns->fstedge(curn);
+#endif
            if (cure) {
                if (entry == agopp(cure))
                    continue;
@@ -500,8 +527,12 @@ static void travDFS(Gpr_t * state, comp_prog * xprog, trav_fns * fns)
 static void travNodes(Gpr_t * state, comp_prog * xprog)
 {
     Agnode_t *n;
-
+#ifdef USE_CGRAPH
+    Agraph_t* g = state->curgraph;
+    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
+#else
     for (n = agfstnode(state->curgraph); n; n = agnxtnode(n)) {
+#endif
        evalNode(state, xprog, n);
     }
 }
@@ -510,9 +541,14 @@ static void travEdges(Gpr_t * state, comp_prog * xprog)
 {
     Agnode_t *n;
     Agedge_t *e;
-
+#ifdef USE_CGRAPH
+    Agraph_t* g = state->curgraph;
+    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
+       for (e = agfstout(g, n); e; e = agnxtout(g, e)) {
+#else
     for (n = agfstnode(state->curgraph); n; n = agnxtnode(n)) {
        for (e = agfstout(n); e; e = agnxtout(e)) {
+#endif
            evalEdge(state, xprog, e);
        }
     }
@@ -522,11 +558,19 @@ static void travFlat(Gpr_t * state, comp_prog * xprog)
 {
     Agnode_t *n;
     Agedge_t *e;
-
+#ifdef USE_CGRAPH
+    Agraph_t* g = state->curgraph;
+    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
+#else
     for (n = agfstnode(state->curgraph); n; n = agnxtnode(n)) {
+#endif
        evalNode(state, xprog, n);
        if (xprog->n_estmts > 0) {
+#ifdef USE_CGRAPH
+           for (e = agfstout(g, n); e; e = agnxtout(g, e)) {
+#else
            for (e = agfstout(n); e; e = agnxtout(e)) {
+#endif
                evalEdge(state, xprog, e);
            }
        }