/misc/src/release/graphviz-2.18-1/src/graphviz-2.18/lib/circogen/nodeset.c

Go to the documentation of this file.
00001 /* $Id: nodeset.c,v 1.1.1.1 2004/12/23 04:04:30 ellson Exp $ $Revision: 1.1.1.1 $ */
00002 /* vim:set shiftwidth=4 ts=8: */
00003 
00004 /**********************************************************
00005 *      This software is part of the graphviz package      *
00006 *                http://www.graphviz.org/                 *
00007 *                                                         *
00008 *            Copyright (c) 1994-2004 AT&T Corp.           *
00009 *                and is licensed under the                *
00010 *            Common Public License, Version 1.0           *
00011 *                      by AT&T Corp.                      *
00012 *                                                         *
00013 *        Information and Software Systems Research        *
00014 *              AT&T Research, Florham Park NJ             *
00015 **********************************************************/
00016 
00017 
00018 #include <nodeset.h>
00019 
00020 
00021 static nsitem_t *mkItem(Dt_t * d, nsitem_t * obj, Dtdisc_t * disc)
00022 {
00023     nsitem_t *ap = GNEW(nsitem_t);
00024 
00025     ap->np = obj->np;
00026     return ap;
00027 }
00028 
00029 static void freeItem(Dt_t * d, nsitem_t * obj, Dtdisc_t * disc)
00030 {
00031     free(obj);
00032 }
00033 
00034 static int
00035 cmpItem(Dt_t * d, Agnode_t ** key1, Agnode_t ** key2, Dtdisc_t * disc)
00036 {
00037     if (*key1 > *key2)
00038         return 1;
00039     else if (*key1 < *key2)
00040         return -1;
00041     else
00042         return 0;
00043 }
00044 
00045 static Dtdisc_t nodeDisc = {
00046     offsetof(nsitem_t, np),     /* key */
00047     sizeof(Agnode_t *),         /* size */
00048     offsetof(nsitem_t, link),   /* link */
00049     (Dtmake_f) mkItem,
00050     (Dtfree_f) freeItem,
00051     (Dtcompar_f) cmpItem,
00052     (Dthash_f) 0,
00053     (Dtmemory_f) 0,
00054     (Dtevent_f) 0
00055 };
00056 
00057 /* mkNodeset:
00058  * Creates an empty node set.
00059  */
00060 nodeset_t *mkNodeset()
00061 {
00062     nodeset_t *s = dtopen(&nodeDisc, Dtoset);
00063     return s;
00064 }
00065 
00066 /* freeNodeset:
00067  * Deletes a node set, deleting all items as well.
00068  * It does not delete the nodes.
00069  */
00070 void freeNodeset(nodeset_t * s)
00071 {
00072     if (s != NULL)
00073         dtclose(s);
00074 }
00075 
00076 /* clearNodeset:
00077  * Remove all items from a node set.
00078  */
00079 void clearNodeset(nodeset_t * s)
00080 {
00081     dtclear(s);
00082 }
00083 
00084 /* insertNodeset:
00085  * Add a node into the nodeset.
00086  */
00087 void insertNodeset(nodeset_t * ns, Agnode_t * n)
00088 {
00089     nsitem_t key;
00090 
00091     key.np = n;
00092     dtinsert(ns, &key);
00093 }
00094 
00095 void removeNodeset(nodeset_t * ns, Agnode_t * n)
00096 {
00097     nsitem_t key;
00098 
00099     key.np = n;
00100     dtdelete(ns, &key);
00101 }
00102 
00103 /* sizeNodeset:
00104  * Report on the nodeset size.
00105  */
00106 int sizeNodeset(nodeset_t * ns)
00107 {
00108     return dtsize(ns);
00109 }
00110 
00111 /* As the node set is a Dt_t, traversal is done using standard
00112  * functions from libcdt.
00113  */
00114 
00115 void printNodeset(nodeset_t * ns)
00116 {
00117     nsitem_t *ip;
00118     for (ip = (nsitem_t *) dtfirst(ns); ip;
00119          ip = (nsitem_t *) dtnext(ns, ip)) {
00120         fprintf(stderr, "%s", ip->np->name);
00121     }
00122     fputs("\n", stderr);
00123 }

Generated on Mon Mar 31 19:03:23 2008 for Graphviz by  doxygen 1.5.1