+/* $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);
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_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_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);
}
}
+
+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;
+}