]> granicus.if.org Git - graphviz/commitdiff
Generalize agroot to take any object.
authorerg <devnull@localhost>
Sat, 6 Sep 2008 18:31:42 +0000 (18:31 +0000)
committererg <devnull@localhost>
Sat, 6 Sep 2008 18:31:42 +0000 (18:31 +0000)
lib/cgraph/cgraph.h
lib/cgraph/obj.c

index 3b75bf5eb36913168a7a9f10e942e6313a0d195d..75f3a1c4359caf7dcd63055b74f3d802b7aca7e4 100644 (file)
@@ -292,7 +292,8 @@ extern Agedge_t *agfstedge(Agraph_t * g, Agnode_t * n);
 extern Agedge_t *agnxtedge(Agraph_t * g, Agedge_t * e, Agnode_t * n);
 
 /* generic */
-extern Agraph_t *agraphof(void *);
+extern Agraph_t *agraphof(void* obj);
+extern Agraph_t *agroot(void* obj);
 extern char *agnameof(void *);
 extern int agrelabel(void *obj, char *name);   /* scary */
 extern int agrelabel_node(Agnode_t * n, char *newname);
@@ -357,7 +358,7 @@ extern int agsafeset(void* obj, char* name, char* value, char* def);
 extern Agraph_t *agsubg(Agraph_t * g, char *name, int cflag);  /* constructor */
 extern Agraph_t *agidsubg(Agraph_t * g, unsigned long id, int cflag);  /* constructor */
 extern Agraph_t *agfstsubg(Agraph_t * g), *agnxtsubg(Agraph_t * subg);
-extern Agraph_t *agparent(Agraph_t * g), *agroot(Agraph_t * g);
+extern Agraph_t *agparent(Agraph_t * g);
 
 /* set cardinality */
 extern int agnnodes(Agraph_t * g), agnedges(Agraph_t * g);
index 73274978d0c03e34f396bc12150cb95cbfdbad1d..857ec4aec79c7d409de4bf4c94dd2813630007be 100755 (executable)
@@ -170,6 +170,22 @@ void agdelcb(Agraph_t * g, void *obj, Agcbstack_t * cbstack)
        fn(g, obj, cbstack->state);
 }
 
+Agraph_t *agroot(void* obj)
+{
+    switch (AGTYPE(obj)) {
+    case AGINEDGE:
+    case AGOUTEDGE:
+       return ((Agedge_t *) obj)->node->root;
+    case AGNODE:
+       return ((Agnode_t *) obj)->root;
+    case AGRAPH:
+       return ((Agraph_t *) obj)->root;
+    default:                   /* actually can't occur if only 2 bit tags */
+       agerr(AGERR, "agroot of a bad object");
+       return NILgraph;
+    }
+}
+
 Agraph_t *agraphof(void *obj)
 {
     switch (AGTYPE(obj)) {