]> granicus.if.org Git - graphviz/commitdiff
add firsthead,nexthead firsttail,nexttail
authorellson <devnull@localhost>
Tue, 18 Oct 2005 18:52:53 +0000 (18:52 +0000)
committerellson <devnull@localhost>
Tue, 18 Oct 2005 18:52:53 +0000 (18:52 +0000)
tclpkg/gv/gv.cpp
tclpkg/gv/gv.i
tclpkg/gv/test.cs
tclpkg/gv/test.java
tclpkg/gv/test.php
tclpkg/gv/test.pl
tclpkg/gv/test.py
tclpkg/gv/test.rb
tclpkg/gv/test.tcl

index 755a5da5bff67b9dcd84b50a72d540bc88efe595..d9fa3fcb5a4334adc17f9b5473dc51dd50ba5ed6 100644 (file)
 
 GVC_t *gvc;
 
-static void gvinit()
+Agraph_t *graph(char *name)
 {
-    gvc = gvContext();
+    if (!gvc)
+       gvc = gvContext();
+    return agopen(name, AGRAPH);
 }
 
 Agraph_t *digraph(char *name)
 {
-    Agraph_t *g;
-
     if (!gvc)
-       gvinit();
-    g = agopen(name, AGDIGRAPH);
-    GD_drawing(g) = NULL;
-    return g;
+       gvc = gvContext();
+    return agopen(name, AGDIGRAPH);
 }
 
-Agraph_t *digraphstrict(char *name)
+Agraph_t *strictgraph(char *name)
 {
-    Agraph_t *g;
-
     if (!gvc)
-       gvinit();
-    g = agopen(name, AGDIGRAPHSTRICT);
-    GD_drawing(g) = NULL;
-    return g;
+       gvc = gvContext();
+    return agopen(name, AGRAPHSTRICT);
 }
 
-Agraph_t *graph(char *name)
+Agraph_t *strictdigraph(char *name)
 {
-    Agraph_t *g;
-
     if (!gvc)
-       gvinit();
-    g = agopen(name, AGRAPH);
-    GD_drawing(g) = NULL;
-    return g;
+       gvc = gvContext();
+    return agopen(name, AGDIGRAPHSTRICT);
 }
 
-Agraph_t *graphstrict(char *name)
+Agraph_t *readstring(char *string)
 {
-    Agraph_t *g;
-
     if (!gvc)
-       gvinit();
-    g = agopen(name, AGRAPHSTRICT);
-    GD_drawing(g) = NULL;
-    return g;
+       gvc = gvContext();
+    return agmemread(string);
 }
 
-Agraph_t *stringgraph(char *graphstring)
+Agraph_t *read(FILE *f)
 {
-    Agraph_t *g;
-
     if (!gvc)
-       gvinit();
-    g = agmemread(graphstring);
-    GD_drawing(g) = NULL;
-    return g;
+       gvc = gvContext();
+    return agread(f);
 }
 
-Agraph_t *readgraph(char *filename)
+Agraph_t *read(char *filename)
 {
     FILE *f;
     Agraph_t *g;
 
-    if (!gvc)
-       gvinit();
     f = fopen(filename, "r");
+    if (!f)
+       return NULL;
     g = agread(f);
     fclose(f);
-    GD_drawing(g) = NULL;
     return g;
 }
 
@@ -113,6 +94,21 @@ Agedge_t *edge(Agnode_t *t, Agnode_t *h)
     return agedge(t->graph, t, h);
 }
 
+Agedge_t *edge(char *tname, Agnode_t *h)
+{
+    return agedge(h->graph, agnode(h->graph, tname), h);
+}
+
+Agedge_t *edge(Agnode_t *t, char *hname)
+{
+    return agedge(t->graph, t, agnode(t->graph, hname));
+}
+
+Agedge_t *edge(Agraph_t *g, char *tname, char *hname)
+{
+    return agedge(g, agnode(g, tname), agnode(g, hname));
+}
+
 //-------------------------------------------------
 char *set(Agraph_t *g, Agsym_t *a)
 {
@@ -296,6 +292,13 @@ char *set(Agedge_t *e, char *attr, char *val)
     return val;
 }
 //-------------------------------------------------
+Agraph_t *findsubg(Agraph_t *g, char *name)
+{
+    if (!g || !name)
+       return NULL;
+    return agfindsubg(g, name);
+}
+
 Agnode_t *findnode(Agraph_t *g, char *name)
 {
     if (!g || !name)
@@ -303,6 +306,13 @@ Agnode_t *findnode(Agraph_t *g, char *name)
     return agfindnode(g, name);
 }
 
+Agedge_t *findedge(Agnode_t *t, Agnode_t *h)
+{
+    if (!t || !h)
+       return NULL;
+    return agfindedge(t->graph, t, h);
+}
+
 Agsym_t *findattr(Agraph_t *g, char *name)
 {
     if (!g || !name)
@@ -529,12 +539,22 @@ Agedge_t *nextout(Agraph_t *g, Agedge_t *e)
     e = agnxtout(g, e);
     if (e)
        return (e);
-    n = agnxtnode(g, n);
+    n = agnxtnode(g, e->tail);
     if (!n)
        return NULL;
     return agfstout(g, n);
 }
 
+Agedge_t *firstedge(Agraph_t *g)
+{
+    return firstout(g);
+} 
+
+Agedge_t *nextedge(Agraph_t *g, Agedge_t *e)
+{
+    return nextout(g, e);
+} 
+
 Agedge_t *firstout(Agnode_t *n)
 {
     if (!n)
@@ -546,9 +566,52 @@ Agedge_t *nextout(Agnode_t *n, Agedge_t *e)
 {
     if (!n || !e)
        return NULL;
-    return (agnxtout(n->graph, e));
+    return agnxtout(n->graph, e);
 }
 
+Agnode_t *firsthead(Agnode_t *n)
+{
+    Agedge_t *e;
+
+    if (!n)
+       return NULL;
+    e = agfstout(n->graph, n);
+    if (!e)
+       return NULL;
+    return e->head;
+}
+
+Agnode_t *nexthead(Agnode_t *n, Agnode_t *h)
+{
+    Agedge_t *e;
+
+    if (!n || !h)
+       return NULL;
+    e = agfindedge(n->graph, n, h);
+    if (!e)
+       return NULL;
+    do {
+       e = agnxtout(n->graph, e);
+       if (!e)
+           return NULL;
+    } while (e->head == h);
+    return e->head;
+}
+
+Agedge_t *firstedge(Agnode_t *n)
+{
+    if (!n)
+       return NULL;
+    return agfstedge(n->graph, n);
+} 
+
+Agedge_t *nextedge(Agnode_t *n, Agedge_t *e)
+{
+    if (!n || !e)
+       return NULL;
+    return agnxtedge(n->graph, e, n); 
+} 
+
 Agedge_t *firstin(Agraph_t *g)
 {
     Agnode_t *n;
@@ -558,7 +621,7 @@ Agedge_t *firstin(Agraph_t *g)
     n = agfstnode(g);
     if (!n)
        return NULL;
-    return(agfstin(g, n));
+    return agfstin(g, n);
 }
 
 Agedge_t *nextin(Agraph_t *g, Agedge_t *e)
@@ -573,45 +636,74 @@ Agedge_t *nextin(Agraph_t *g, Agedge_t *e)
     n = agnxtnode(g, n);
     if (!n)
        return NULL;
-    return (agfstin(g, n));
+    return agfstin(g, n);
 }
 
 Agedge_t *firstin(Agnode_t *n)
 {
     if (!n)
        return NULL;
-    return(agfstin(n->graph, n));
+    return agfstin(n->graph, n);
 }
 
 Agedge_t *nextin(Agnode_t *n, Agedge_t *e)
 {
     if (!n || !e)
        return NULL;
-    return (agnxtin(n->graph, e));
+    return agnxtin(n->graph, e);
+}
+
+Agnode_t *firsttail(Agnode_t *n)
+{
+    Agedge_t *e;
+
+    if (!n)
+       return NULL;
+    e = agfstin(n->graph, n);
+    if (!e)
+       return NULL;
+    return e->tail;
+}
+
+Agnode_t *nexttail(Agnode_t *n, Agnode_t *t)
+{
+    Agedge_t *e;
+
+    if (!n || !t)
+       return NULL;
+    e = agfindedge(n->graph, t, n);
+    if (!e)
+       return NULL;
+    do {
+       e = agnxtout(n->graph, e);
+       if (!e)
+           return NULL;
+    } while (e->tail == t);
+    return e->tail;
 }
 
 Agnode_t *firstnode(Agraph_t *g)
 {
-    return (agfstnode(g));
+    return agfstnode(g);
 }
 
 Agnode_t *nextnode(Agraph_t *g, Agnode_t *n)
 {
-    return (agnxtnode(g, n));
+    return agnxtnode(g, n);
 }
 
 Agnode_t *firstnode(Agedge_t *e)
 {
     if (!e)
        return NULL;
-    return (e->tail);
+    return e->tail;
 }
 
 Agnode_t *nextnode(Agedge_t *e, Agnode_t *n)
 {
     if (!e || n != e->tail)
        return NULL;
-    return (e->head);
+    return e->head;
 }
 
 Agsym_t *firstattr(Agraph_t *g)
index 3cf16067c4743439ea1f5649ae72c370728a84a1..66762c440edec8dc94a25a00663a17a8b1056507 100644 (file)
 %}
 
 /* new graph objects */
-extern Agraph_t *stringgraph(char *graphstring);       /* from dot-formatted string */
-extern Agraph_t *readgraph(char *filename);            /* from dot-formatted file */
+extern Agraph_t *graph(char *name);            /* new empty graph */
+extern Agraph_t *digraph(char *name);          /* new empty digraph */
+extern Agraph_t *strictgraph(char *name);      /* new empty strict graph */
+extern Agraph_t *strictdigraph(char *name);    /* new empty strict digraph */
 
-extern Agraph_t *digraphstrict(char *name);            /* new empty digraphstrict */
-extern Agraph_t *graphstrict(char *name);              /* new empty graphstrict */
-extern Agraph_t *digraph(char *name);                  /* new empty digraph */
-extern Agraph_t *graph(char *name);                    /* new empty graph */
+extern Agraph_t *readstring(char *string);     /* from dot-formatted string */
+extern Agraph_t *read(char *filename);         /* from dot-formatted file */
+extern Agraph_t *read(FILE *f);                        /* from dot-formatted file */
 
-extern Agraph_t *graph(Agraph_t *g, char *name);       /* add new empty subgraph to existing graph */
-extern Agnode_t *node(Agraph_t *g, char *name);                /* add new node to existing graph */
-extern Agedge_t *edge(Agnode_t *t, Agnode_t *h);       /* add new edge between existing nodes */
+extern Agraph_t *graph(Agraph_t *g, char *name);/* add subgraph to graph */
+extern Agnode_t *node(Agraph_t *g, char *name);        /* add node to graph */
+extern Agedge_t *edge(Agnode_t *t, Agnode_t *h);/* add edge between existing nodes */
+                               
+extern Agedge_t *edge(Agnode_t *t, char *hname);/* add edge, existing tail, named head which will be induced if necessary */
+extern Agedge_t *edge(char *tname, Agnode_t *h);/* add edge, named tail which will be induced if necessary, existing head */
+
+extern Agedge_t *edge(Agraph_t *g, char *tname, char *hname);/* add edge between named nodes, induced as necessary */
 
 /* set/get attribute of graph/node/edge */
 extern char *set(Agraph_t *g, char *attr, char *val=NULL);
@@ -47,7 +53,9 @@ extern char *nameof(Agnode_t *n);
 //extern char *nameof(Agedge_t *e);
 extern char *nameof(Agsym_t *a);
 
-extern Agsym_t *findnode(Agraph_t *g, char *name);
+extern Agraph_t *findsubg(Agraph_t *g, char *name);
+extern Agnode_t *findnode(Agraph_t *g, char *name);
+extern Agedge_t *findedge(Agnode_t *t, Agnode_t *h);
 
 extern Agsym_t *findattr(Agraph_t *g, char *name);
 extern Agsym_t *findattr(Agnode_t *n, char *name);
@@ -73,18 +81,30 @@ extern Agraph_t *nextsubg(Agraph_t *g, Agraph_t *sg);
 extern Agraph_t *firstsupg(Agraph_t *g);
 extern Agraph_t *nextsupg(Agraph_t *g, Agraph_t *sg);
 
+extern Agedge_t *firstedge(Agraph_t *g);
+extern Agedge_t *nextedge(Agraph_t *g, Agedge_t *e);
+
 extern Agedge_t *firstout(Agraph_t *g);
 extern Agedge_t *nextout(Agraph_t *g, Agedge_t *e);
 
+extern Agedge_t *firstedge(Agnode_t *n);
+extern Agedge_t *nextedge(Agnode_t *n, Agedge_t *e);
+
 extern Agedge_t *firstout(Agnode_t *n);
 extern Agedge_t *nextout(Agnode_t *n, Agedge_t *e);
 
+extern Agnode_t *firsthead(Agnode_t *n);
+extern Agnode_t *nexthead(Agnode_t *n, Agnode_t *h);
+
 extern Agedge_t *firstin(Agraph_t *g);
 extern Agedge_t *nextin(Agnode_t *n, Agedge_t *e);
 
 extern Agedge_t *firstin(Agnode_t *n);
 extern Agedge_t *nextin(Agraph_t *g, Agedge_t *e);
 
+extern Agnode_t *firsttail(Agnode_t *n);
+extern Agnode_t *nexttail(Agnode_t *n, Agnode_t *t);
+
 extern Agnode_t *firstnode(Agraph_t *g);
 extern Agnode_t *nextnode(Agraph_t *g, Agnode_t *n);
 
index 35a4ac94cb4702078430493aa48d5898a42853d0..3241e71a82c9d6cc747df4918813931215530ccd 100644 (file)
@@ -26,10 +26,10 @@ public class test {
        gv.rm(m);
        gv.rm(g);
 
-       g = gv.stringgraph("digraph G {a->b}");
+       g = gv.readstring("digraph G {a->b}");
        gv.rm(g);
 
-       g = gv.readgraph("hello.dot");
+       g = gv.read("hello.dot");
        gv.layout(g,"dot");
        gv.render(g,"png", "hello.png");
        gv.rm(g);
index cfe6b194486466c5738fe8e50aae4bd2dc4e6c5c..9f4ad03d8dabfd71127c1be0962de16057190a5e 100644 (file)
@@ -28,10 +28,10 @@ public class test {
        gv.rm(m);
        gv.rm(g);
 
-       g = gv.stringgraph("digraph G {a->b}");
+       g = gv.readstring("digraph G {a->b}");
        gv.rm(g);
 
-       g = gv.readgraph("hello.dot");
+       g = gv.read("hello.dot");
        gv.layout(g,"dot");
        gv.render(g,"png","hello.png");
        gv.rm(g);
index ff8670c91363051fed28faa495fa8ef3d0586854..b3c003ccb3e67b2809954bc52679d339560ce96f 100644 (file)
@@ -21,10 +21,10 @@ $g = Gv::digraph "G";
 #gv::rm $m;
 #gv::rm $g;
 #
-#$g = gv::stringgraph "digraph G {a->b}";
+#$g = gv::readstring "digraph G {a->b}";
 #gv::rm $g;
 #
-#$g = gv::readgraph "hello.dot";
+#$g = gv::read "hello.dot";
 #gv::layout($g, "dot");
 #gv::render($g, "png", "hello.png");
 #gv::rm $g;
index b0d175e816503916d7139768201aba49af3f4583..f4d3d8d89a23f14072a0b3d5177947ed2ecc613e 100644 (file)
@@ -19,10 +19,10 @@ gv::rm $n;
 gv::rm $m;
 gv::rm $g;
 
-$g = gv::stringgraph "digraph G {a->b}";
+$g = gv::readstring "digraph G {a->b}";
 gv::rm $g;
 
-$g = gv::readgraph "hello.dot";
+$g = gv::read "hello.dot";
 gv::layout($g, "dot");
 gv::render($g, "png", "hello.png");
 gv::rm $g;
index e1532652afd0bb3c11e69aa5cd6d775480268895..a9869f2981d984b0bd6a83f7e6d8cc58d5fbfce1 100644 (file)
@@ -19,10 +19,10 @@ gv.rm(m)
 gv.rm(n)
 gv.rm(g)
 
-g = gv.stringgraph("digraph G {a->b}")
+g = gv.readstring("digraph G {a->b}")
 gv.rm(g)
 
-g = gv.readgraph("hello.dot")
+g = gv.read("hello.dot")
 gv.layout(g, "dot")
 gv.render(g, "png", "hello.png")
 gv.rm(g)
index 14e22ecef5ee7a84162cc0d16c22ff88da87a1b6..0b46d0fe55f043830054fd901eff581b7f29b258 100644 (file)
@@ -19,10 +19,10 @@ Gv.rm(n)
 Gv.rm(m)
 Gv.rm(g)
 
-g = Gv.stringgraph("digraph G {a->b}")
+g = Gv.readstring("digraph G {a->b}")
 Gv.rm(g)
 
-g = Gv.readgraph("hello.dot")
+g = Gv.read("hello.dot")
 Gv.layout(g, "dot")
 Gv.render(g, "png", "hello.png")
 Gv.rm(g)
index b1a14180ef162db9122ecfe242c8a1730b6a02f8..61d2abd9015e1d0396bae19ee3647bdacbdebcc9 100644 (file)
@@ -20,10 +20,10 @@ gv::rm $n
 gv::rm $m
 gv::rm $g
 
-set g [gv::stringgraph "digraph G {a->b}"]
+set g [gv::readstring "digraph G {a->b}"]
 gv::rm $g
 
-set g [gv::readgraph hello.dot]
+set g [gv::read hello.dot]
 for {set n [gv::firstnode $g]} {[gv::ok $n]} {set n [gv::nextnode $g $n]} {
     puts [gv::nameof $n]
     for {set a [gv::firstattr $n]} {[gv::ok $a]} {set a [gv::nextattr $n $a]} {