]> granicus.if.org Git - graphviz/commitdiff
small test of iterators in test.tcl
authorellson <devnull@localhost>
Tue, 18 Oct 2005 18:50:50 +0000 (18:50 +0000)
committerellson <devnull@localhost>
Tue, 18 Oct 2005 18:50:50 +0000 (18:50 +0000)
tclpkg/gv/gv.cpp
tclpkg/gv/gv.i
tclpkg/gv/test.tcl

index bf80156c04cb1ad4380f5a465b88d052e3a52a1a..ea397a8e6b750644b60562f00b544aaff86ac0e0 100644 (file)
@@ -394,6 +394,31 @@ char *nameof(Agsym_t *a)
     return a->name;
 }
 
+//-------------------------------------------------
+bool ok(Agraph_t *g)
+{
+    if (!g) 
+       return false;
+    return true;
+}
+bool ok(Agnode_t *n)
+{
+    if (!n) 
+       return false;
+    return true;
+}
+bool ok(Agedge_t *e)
+{
+    if (!e) 
+       return false;
+    return true;
+}
+bool ok(Agsym_t *a)
+{
+    if (!a) 
+       return false;
+    return true;
+}
 //-------------------------------------------------
 Agraph_t *firstsubg(Agraph_t *g)
 {
@@ -606,7 +631,10 @@ Agsym_t *nextattr(Agraph_t *g, Agsym_t *a)
     if (!g || !a)
         return NULL;
     g = g->root;
-    i = a->index + 1;
+    for (i = 0; i < dtsize(g->univ->globattr->dict); i++)
+       if (a == g->univ->globattr->list[i])
+           break;
+    i++;
     if (i > dtsize(g->univ->globattr->dict))
         return NULL;
     return g->univ->globattr->list[i];
@@ -632,7 +660,10 @@ Agsym_t *nextattr(Agnode_t *n, Agsym_t *a)
     if (!n || !a)
         return NULL;
     g = n->graph;
-    i = a->index + 1;
+    for (i = 0; i < dtsize(g->univ->nodeattr->dict); i++)
+       if (a == g->univ->nodeattr->list[i])
+           break;
+    i++;
     if (i > dtsize(g->univ->nodeattr->dict))
         return NULL;
     return g->univ->nodeattr->list[i];
@@ -658,7 +689,10 @@ Agsym_t *nextattr(Agedge_t *e, Agsym_t *a)
     if (!e || !a)
         return NULL;
     g = e->tail->graph;
-    i = a->index + 1;
+    for (i = 0; i < dtsize(g->univ->edgeattr->dict); i++)
+       if (a == g->univ->edgeattr->list[i])
+           break;
+    i++;
     if (i > dtsize(g->univ->edgeattr->dict))
         return NULL;
     return g->univ->edgeattr->list[i];
index 23df49a1ec35aaed941e9857d3c1f1749ca727cb..44460502da613c69eb91876aa89bd923a1c310d6 100644 (file)
@@ -62,6 +62,11 @@ extern Agraph_t *graphof(Agnode_t *n);
 extern Agraph_t *rootof(Agraph_t *g);
 
 /* iterators */
+extern bool ok(Agraph_t *g);
+extern bool ok(Agnode_t *n);
+extern bool ok(Agedge_t *e);
+extern bool ok(Agsym_t *a);
+
 extern Agraph_t *firstsubg(Agraph_t *g);
 extern Agraph_t *nextsubg(Agraph_t *g, Agraph_t *sg);
 
index f5c7345936dcd9912733aa4bd5e243648f020db5..59a38be9f0dcbca79e98cf4930626e170738ef56 100644 (file)
@@ -24,5 +24,11 @@ set g [gv::stringgraph "digraph G {a->b}"]
 gv::rm $g
 
 set g [gv::readgraph 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]} {
+        puts "    [gv::nameof $a] [gv::set $n $a]"
+    }
+}
 gv::layout $g dot
 gv::writegraph $g hello.png png