Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Adding basic parsing functions to the graph library
[simgrid.git] / src / xbt / graph.c
index 01c8111..6247605 100644 (file)
 #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("<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;
+}