Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Adding basic parsing functions to the graph library
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 20 Mar 2006 15:37:37 +0000 (15:37 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 20 Mar 2006 15:37:37 +0000 (15:37 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1962 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/xbt/graph.h
src/xbt/graph.c

index 654e025..df4a322 100644 (file)
@@ -17,11 +17,10 @@ typedef struct xbt_edge  *xbt_edge_t;
 typedef struct xbt_graph  *xbt_graph_t;
 
 /* API */
 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);
 
 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);
 
                          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),
 /* Not implemented yet ! */
 void xbt_export_graphviz(xbt_graph_t g, const char *filename,
                         const char *(node_name)(xbt_node_t),
index 01c8111..6247605 100644 (file)
 #include "xbt/log.h"
 #include "xbt/graph.h"
 #include "graph_private.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
  */
 
 /** 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);
 {
   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;
 }
 
   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);
 {
   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;
                             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("<graph>");
+}
+static void  __parse_graph_end(void) {
+  DEBUG0("</graph>");
+}
+static void __parse_node(void) {
+  DEBUG1("<node label=\"%s\"/>",A_node_name);
+}
+static void __parse_edge(void) {
+  DEBUG2("<edge source=\"%s\" target=\"%s\"/>",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;
+}