X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b17648a31cb015991f7e035c222c2872a0eb0424..5b6756197928481edff951e309ddfc47629c7710:/src/xbt/graph.c diff --git a/src/xbt/graph.c b/src/xbt/graph.c index f740315985..62476059fe 100644 --- a/src/xbt/graph.c +++ b/src/xbt/graph.c @@ -1,15 +1,25 @@ +/* $Id$ */ + +/* a generic graph library. */ + +/* Copyright (c) 2006 Darina Dimitrova, Arnaud Legrand. + All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + #include "xbt/sysdep.h" #include "xbt/log.h" #include "xbt/graph.h" #include "graph_private.h" +#include "xbt/graphxml_parse.h" -/* XBT_LOG_NEW_DEFAULT_SUBCATEGORY(graph,xbt,"GRAPH"); */ +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(graph,xbt,"Graph"); /** Constructor * \return a new graph */ -xbt_graph_t xbt_graph_new_graph(const char *name, unsigned short int directed, - void *data) +xbt_graph_t xbt_graph_new_graph(unsigned short int directed, void *data) { xbt_graph_t graph=NULL; graph=xbt_new0(struct xbt_graph,1); @@ -21,7 +31,7 @@ xbt_graph_t xbt_graph_new_graph(const char *name, unsigned short int directed, return graph; } -xbt_node_t xbt_graph_new_node(xbt_graph_t g,const char *name, void *data) +xbt_node_t xbt_graph_new_node(xbt_graph_t g, void *data) { xbt_node_t node=NULL; node=xbt_new0(struct xbt_node,1); @@ -34,7 +44,7 @@ xbt_node_t xbt_graph_new_node(xbt_graph_t g,const char *name, void *data) } -xbt_edge_t xbt_graph_new_edge(xbt_graph_t g,const char *name, +xbt_edge_t xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst, void *data) { xbt_edge_t edge=NULL; @@ -73,7 +83,8 @@ void xbt_graph_free_graph(xbt_graph_t g, xbt_dynar_foreach(g->nodes,cursor,node) xbt_graph_remove_node(g,node,node_free_function); - /* if xbt_dynar_size(g->edges)>0 SCREAM! */ + xbt_assert0(!xbt_dynar_length(g->edges), + "Damnit, there are some remaining edges!"); xbt_dynar_foreach(g->edges,cursor,edge) xbt_graph_remove_edge(g,edge,edge_free_function); @@ -141,3 +152,40 @@ void xbt_graph_remove_edge(xbt_graph_t g, xbt_edge_t e, void free_function(void } } + +static xbt_graph_t parsed_graph=NULL; + +static void __parse_graph_begin(void) { + DEBUG0(""); +} +static void __parse_graph_end(void) { + DEBUG0(""); +} +static void __parse_node(void) { + DEBUG1("",A_node_name); +} +static void __parse_edge(void) { + DEBUG2("",A_edge_source,A_edge_target); +} + +xbt_graph_t xbt_graph_read(const char *filename) +{ + xbt_graph_t graph = xbt_graph_new_graph(1,NULL); + + parsed_graph = graph; + + xbt_graph_parse_reset_parser(); + + STag_graph_fun = __parse_graph_begin; + ETag_graph_fun = __parse_graph_end; + ETag_node_fun = __parse_node; + ETag_edge_fun = __parse_edge; + + xbt_graph_parse_open(filename); + xbt_assert1((!xbt_graph_parse()),"Parse error in %s",filename); + xbt_graph_parse_close(); + + parsed_graph = NULL; + + return graph; +}