-
- free(d);
- free(p);
- free(adj);
- return r;
-}
-
-static xbt_graph_t parsed_graph = NULL;
-static xbt_dict_t parsed_nodes = NULL;
-
-
-static void __parse_graph_begin(void)
-{
- DEBUG0("<graph>");
-}
-static void __parse_graph_end(void)
-{
- DEBUG0("</graph>");
-}
-
-static void __parse_node(void)
-{
- xbt_node_t node =
- xbt_graph_new_node(parsed_graph, NULL);
-
- xbt_dict_set(parsed_nodes, A_graphxml_node_name, (void *) node, NULL);
-
- DEBUG1("<node label=\"%s\"/>", (char *) (node->data));
-}
-static void __parse_edge(void)
-{
- xbt_edge_t edge =
- xbt_graph_new_edge(parsed_graph,
- xbt_dict_get(parsed_nodes,A_graphxml_edge_source),
- xbt_dict_get(parsed_nodes,A_graphxml_edge_target),
- NULL);
-
- xbt_graph_edge_set_length(edge, atof(A_graphxml_edge_length));
-
- DEBUG4("<edge name=\"%s\" source=\"%s\" target=\"%s\" length=\"%f\"/>",
- (char *) edge->data,
- (char *) (edge->src)->data,
- (char *) (edge->dst)->data,
- xbt_graph_edge_get_length(edge));
-}
-
-xbt_graph_t xbt_graph_read(const char *filename)
-{
- xbt_graph_t graph = xbt_graph_new_graph(1, NULL);
-
- parsed_graph = graph;
- parsed_nodes = xbt_dict_new();
-
-
- xbt_graph_parse_reset_parser();
-
- STag_graphxml_graph_fun = __parse_graph_begin;
- ETag_graphxml_graph_fun = __parse_graph_end;
- ETag_graphxml_node_fun = __parse_node;
- ETag_graphxml_edge_fun = __parse_edge;
-
-
- xbt_graph_parse_open(filename);
- xbt_assert1((!xbt_graph_parse()), "Parse error in %s", filename);
- xbt_graph_parse_close();
-
- xbt_dict_free(&parsed_nodes);
-
- parsed_graph = NULL;
- return graph;