00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "eg_elist.h"
00026 #include "eg_eugraph.h"
00027
00028
00029 typedef struct my_ugraph_t
00030 {
00031 unsigned id;
00032 EGeUgraph_t G;
00033 }
00034 my_ugraph_t;
00035
00036
00037
00038 typedef struct my_unode_t
00039 {
00040 unsigned id;
00041 EGeUgraphNode_t v;
00042 }
00043 my_unode_t;
00044
00045
00046
00047 typedef struct my_uedge_t
00048 {
00049 unsigned id;
00050 EGeUgraphEdge_t e;
00051 }
00052 my_uedge_t;
00053
00054
00055
00056 static inline void display_UG (my_ugraph_t * myG)
00057 {
00058 EGeUgraph_t *G = &(myG->G);
00059 my_unode_t *cn;
00060 my_uedge_t *ce;
00061 EGeUgraphEP_t *lep;
00062 EGeList_t *node_it,
00063 *edge_it;
00064 fprintf (stderr, "Graph %d (%d nodes, %d edges):\n", myG->id, G->n_nodes,
00065 G->n_edges);
00066
00067 if (!EGeListIsEmpty (&(G->nodes)))
00068 {
00069 fprintf (stderr, "Nodes:\n");
00070 for (node_it = G->nodes.next; node_it != &(G->nodes);
00071 node_it = node_it->next)
00072 {
00073 cn = EGcontainerOf (node_it, my_unode_t, v.node_cn);
00074 fprintf (stderr, "\t%d: ", cn->id);
00075 if (!EGeListIsEmpty (&(cn->v.edges)))
00076 {
00077 fprintf (stderr, "(edges) ");
00078 for (edge_it = cn->v.edges.next; edge_it != &(cn->v.edges);
00079 edge_it = edge_it->next)
00080 {
00081 lep = EGcontainerOf (edge_it, EGeUgraphEP_t, cn);
00082 ce = EGcontainerOf (lep, my_uedge_t, e.ep[lep->type]);
00083 fprintf (stderr, "%d ", ce->id);
00084 }
00085 }
00086 fprintf (stderr, "\n");
00087 }
00088 }
00089
00090 }
00091
00092
00093
00094
00095
00096
00097 int main (void)
00098 {
00099 int rval = 0;
00100 my_ugraph_t myG;
00101 my_unode_t nodes[5];
00102 my_uedge_t edges[5];
00103 int i;
00104
00105
00106 EGeUgraphInit (&(myG.G));
00107 myG.id = 0;
00108 display_UG (&myG);
00109
00110
00111 for (i = 5; i--;)
00112 {
00113 EGeUgraphNodeInit (&(nodes[i].v));
00114 EGeUgraphEdgeInit (&(edges[i].e));
00115 nodes[i].id = i;
00116 edges[i].id = i;
00117 }
00118
00119
00120 for (i = 5; i--;)
00121 EGeUgraphAddNode (&(myG.G), &(nodes[i].v));
00122 display_UG (&myG);
00123 for (i = 5; i--;)
00124 EGeUgraphAddEdge (&(myG.G), &(nodes[i].v), &(nodes[(i + 1) % 5].v),
00125 &(edges[i].e));
00126 display_UG (&myG);
00127
00128
00129 for (i = 5; i--;)
00130 {
00131 EGeUgraphChangeHead (&(myG.G), &(edges[i].e), &(nodes[(i + 4) % 5].v));
00132 EGeUgraphChangeTail (&(myG.G), &(edges[i].e), &(nodes[(i + 2) % 5].v));
00133 }
00134 display_UG (&myG);
00135
00136 for (i = 5; i--;)
00137 {
00138 EGeUgraphDelEdge (&(myG.G), &(edges[i].e));
00139 display_UG (&myG);
00140 }
00141
00142 for (i = 5; i--;)
00143 {
00144 EGeUgraphDelNode (&(myG.G), &(nodes[i].v));
00145 display_UG (&myG);
00146 }
00147
00148 EGeUgraphClear (&myG);
00149 for (i = 5; i--;)
00150 {
00151 EGeUgraphNodeClear (&(nodes[i].v));
00152 EGeUgraphEdgeClear (&(edges[i].e));
00153 }
00154 return rval;
00155 }
00156
00157
00158