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

Go to the documentation of this file.
00001 /* $Id: edgelist.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        "edgelist.h"
00019 #include        <assert.h>
00020 
00021 static edgelistitem *mkItem(Dt_t * d, edgelistitem * obj, Dtdisc_t * disc)
00022 {
00023     edgelistitem *ap = GNEW(edgelistitem);
00024 
00025     ap->edge = obj->edge;
00026     return ap;
00027 }
00028 
00029 static void freeItem(Dt_t * d, edgelistitem * obj, Dtdisc_t * disc)
00030 {
00031     free(obj);
00032 }
00033 
00034 static int
00035 cmpItem(Dt_t * d, Agedge_t ** key1, Agedge_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 ELDisc = {
00046     offsetof(edgelistitem, edge),       /* key */
00047     sizeof(Agedge_t *),         /* size */
00048     offsetof(edgelistitem, 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 edgelist *init_edgelist()
00058 {
00059     edgelist *list = dtopen(&ELDisc, Dtoset);
00060     return list;
00061 }
00062 
00063 void free_edgelist(edgelist * list)
00064 {
00065     dtclose(list);
00066 }
00067 
00068 void add_edge(edgelist * list, Agedge_t * e)
00069 {
00070     edgelistitem temp;
00071 
00072     temp.edge = e;
00073     dtinsert(list, &temp);
00074 }
00075 
00076 void remove_edge(edgelist * list, Agedge_t * e)
00077 {
00078     edgelistitem temp;
00079 
00080     temp.edge = e;
00081     dtdelete(list, &temp);
00082 }
00083 
00084 #ifdef DEBUG
00085 void print_edge(edgelist * list)
00086 {
00087     edgelistitem *temp;
00088     Agedge_t *ep;
00089 
00090     for (temp = (edgelistitem *) dtflatten(list); temp;
00091          temp = (edgelistitem *) dtlink(list, (Dtlink_t *) temp)) {
00092         ep = temp->edge;
00093         fprintf(stderr, "%s--%s \n", ep->tail->name, ep->head->name);
00094     }
00095     fputs("\n", stderr);
00096 }
00097 #endif
00098 
00099 int size_edgelist(edgelist * list)
00100 {
00101     return dtsize(list);
00102 }

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