From 5b6756197928481edff951e309ddfc47629c7710 Mon Sep 17 00:00:00 2001 From: alegrand Date: Mon, 20 Mar 2006 15:37:37 +0000 Subject: [PATCH 1/1] Adding basic parsing functions to the graph library git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1962 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- include/xbt/graph.h | 11 ++++++----- src/xbt/graph.c | 47 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/include/xbt/graph.h b/include/xbt/graph.h index 654e0259f1..df4a32259c 100644 --- a/include/xbt/graph.h +++ b/include/xbt/graph.h @@ -17,11 +17,10 @@ typedef struct xbt_edge *xbt_edge_t; typedef struct xbt_graph *xbt_graph_t; /* API */ -xbt_graph_t xbt_graph_new_graph(const char *name, - unsigned short int directed, void *data); -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_node_t src, xbt_node_t dst, void *data); +xbt_graph_t xbt_graph_new_graph(unsigned short int directed, void *data); +xbt_node_t xbt_graph_new_node(xbt_graph_t g, void *data); +xbt_edge_t xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst, + void *data); void xbt_graph_remove_node(xbt_graph_t g, xbt_node_t n, void_f_pvoid_t *free_function); @@ -32,6 +31,8 @@ void xbt_graph_free_graph(xbt_graph_t g, void_f_pvoid_t *edge_free_function, void_f_pvoid_t *graph_free_function); +xbt_graph_t xbt_graph_read(const char *filename); + /* Not implemented yet ! */ void xbt_export_graphviz(xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), diff --git a/src/xbt/graph.c b/src/xbt/graph.c index 01c8111418..62476059fe 100644 --- a/src/xbt/graph.c +++ b/src/xbt/graph.c @@ -12,14 +12,14 @@ #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); @@ -31,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); @@ -44,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; @@ -152,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; +} -- 2.20.1