/* graph.h Pedro Flynn - pflynn@microsoftsucks.org */ #ifndef GRAPH_H #define GRAPH_H #include #include "list.h" #include "set.h" typedef struct AdjList_{ void* vertex; Set* adjacent; } AdjList; typedef struct Graph_{ int vcount; int ecount; int (*match)(const void*,const void*); void (*destroy)(void*); List* adjlists; } Graph; typedef enum VertexColor_ {white,gray,black} VertexColor; Graph* graph_create(int (*match)(const void*,const void*),void (*destroy)(void*)); void graph_destroy(Graph* graph); int graph_ins_vertex(Graph* graph,const void* data); int graph_ins_edge(Graph* graph,const void* data1,const void* data2); int graph_rem_vertex(Graph* graph,void** data); int graph_rem_edge(Graph* graph,const void* data1,void** data2); int graph_adjlist(const Graph* graph,const void* data,AdjList** adjlist); int graph_is_adjacent(const Graph* graph,const void* data1,const void* data2); #define GRAPH_ADJLISTS(graph) ((graph)->adjlists) #define GRAPH_VCOUNT(graph) ((graph)->vcount) #define GRAPH_ECOUNT(graph) ((graph)->ecount) #endif