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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <stdio.h>
00037 #include <stdlib.h>
00038
00039 #ifdef LINUX
00040 #include <getopt.h>
00041 #endif
00042
00043 #include "eg_mempool.h"
00044 #include "eg_dgraph.h"
00045
00046 void usage (char *program)
00047 {
00048 fprintf (stdout, "Usage: %s [options]\n", program);
00049 fprintf (stdout, "Options:\n");
00050 fprintf (stdout, " -f n file name.\n");
00051 }
00052
00053 int parseargs (int argc,
00054 char **argv,
00055 char **file_name)
00056 {
00057
00058 int c;
00059
00060 while ((c = getopt (argc, argv, "f:")) != EOF)
00061 {
00062 switch (c)
00063 {
00064 case 'f':
00065 *file_name = optarg;
00066 break;
00067 default:
00068 usage (argv[0]);
00069 return 1;
00070 }
00071 }
00072
00073
00074 fprintf (stdout, "Parsed Options:\n");
00075 fprintf (stdout, "input : %s\n", *file_name);
00076
00077 return 0;
00078
00079 }
00080
00081 int main (int argc,
00082 char **argv)
00083 {
00084
00085 int rval;
00086 unsigned int i;
00087 char *file_name = 0;
00088 FILE *file;
00089
00090 unsigned int nedges,
00091 nnodes;
00092 unsigned int *edges = 0;
00093
00094 double *weight = 0;
00095
00096 EGmemPool_t *mem = 0;
00097 EGdGraph_t *G = 0;
00098 EGdGraphNode_t **nodes = 0;
00099
00100
00101 rval = parseargs (argc, argv, &file_name);
00102 CHECKRVAL (rval);
00103
00104
00105 file = fopen (file_name, "r");
00106 TEST (!file, "unable to open file %s", file_name);
00107
00108 fscanf (file, "%u %u", &nnodes, &nedges);
00109
00110 edges = (unsigned int *) malloc (sizeof (unsigned int) * 2 * nedges);
00111 weight = (double *) malloc (sizeof (double) * nedges);
00112
00113 for (i = 0; i < nedges; i++)
00114 {
00115 fscanf (file, "%u %u %lf", &edges[2 * i], &edges[2 * i + 1], &weight[i]);
00116 TEST (edges[2 * i] > (nnodes - 1), "Edge %u (head) out of bounds", i);
00117 TEST (edges[2 * i + 1] > (nnodes - 1), "Edge %u (tail) out of bounds", i);
00118 }
00119
00120 fclose (file);
00121
00122
00123 mem = EGnewMemPool (100, EGmemPoolNewSize, EGmemPoolNewSize (1));
00124
00125
00126 G = EGnewDGraph (mem);
00127
00128
00129 nodes =
00130 (EGdGraphNode_t **) EGmemPoolMalloc (mem,
00131 sizeof (EGdGraphNode_t *) * nnodes);
00132
00133
00134 fprintf (stderr, "\nAdding Nodes... ");
00135 for (i = 0; i < nnodes; i++)
00136 nodes[i] = EGdGraphAddNode (G, 0);
00137
00138
00139 fprintf (stderr, "done.\n\nAdding Edges... ");
00140 for (i = 0; i < nedges; i++)
00141 EGdGraphAddEdge (G, &weight[i], nodes[edges[2 * i]],
00142 nodes[edges[2 * i + 1]]);
00143
00144 fprintf (stderr, "done.\n\n");
00145
00146
00147
00148 free (edges);
00149 free (weight);
00150 EGmemPoolFree (nodes, sizeof (EGdGraphNode_t *) * nnodes, mem);
00151 EGdGraphClear (G, 0, 0, 0);
00152 EGfreeDGraph (G);
00153 EGfreeMemPool (mem);
00154
00155 return 0;
00156
00157 }