X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/68f9a22d51b8053a0f7f40c5a2531f6faca520fc..3d845df082d79ab89649c1a8829eea201ae01085:/src/xbt/graph.c diff --git a/src/xbt/graph.c b/src/xbt/graph.c index fdf9f5f07d..5d3629020e 100644 --- a/src/xbt/graph.c +++ b/src/xbt/graph.c @@ -1,12 +1,11 @@ /* a generic graph library. */ -/* Copyright (c) 2006, 2007, 2008, 2009, 2010. The SimGrid Team. +/* Copyright (c) 2006-2014. The SimGrid Team. * 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 "simgrid_config.h" /* getline */ #include #include #include "xbt/sysdep.h" @@ -17,7 +16,7 @@ #include "xbt/dict.h" #include "xbt/heap.h" #include "xbt/str.h" - +#include "xbt/file.h" @@ -140,35 +139,30 @@ void xbt_graph_free_graph(xbt_graph_t g, void_f_pvoid_t edge_free_function, void_f_pvoid_t graph_free_function) { - unsigned int cursor = 0; - xbt_node_t node = NULL; - xbt_edge_t edge = NULL; + unsigned int cursor; + xbt_node_t node; + xbt_edge_t edge; + xbt_dynar_foreach(g->edges, cursor, edge) { + if (edge_free_function) + edge_free_function(edge->data); + free(edge); + } + xbt_dynar_free(&(g->edges)); xbt_dynar_foreach(g->nodes, cursor, node) { xbt_dynar_free(&(node->out)); xbt_dynar_free(&(node->in)); if (node_free_function) node_free_function(node->data); + free(node); } - - xbt_dynar_foreach(g->edges, cursor, edge) { - if (edge_free_function) - edge_free_function(edge->data); - } - - xbt_dynar_foreach(g->nodes, cursor, node) - free(node); xbt_dynar_free(&(g->nodes)); - xbt_dynar_foreach(g->edges, cursor, edge) - free(edge); - xbt_dynar_free(&(g->edges)); if (graph_free_function) graph_free_function(g->data); free(g); xbt_graph_parse_lex_destroy(); - return; } @@ -584,8 +578,8 @@ static void __parse_node(void) if (__parse_node_label_and_data) node->data = __parse_node_label_and_data(node, A_graphxml_node_label, A_graphxml_node_data); - node->position_x = xbt_graph_parse_get_double(A_graphxml_node_position_x); - node->position_y = xbt_graph_parse_get_double(A_graphxml_node_position_y); + node->position_x = xbt_graph_parse_get_double(A_graphxml_node_position___x); + node->position_y = xbt_graph_parse_get_double(A_graphxml_node_position___y); xbt_dict_set(parsed_nodes, A_graphxml_node_name, (void *) node, NULL); } @@ -730,7 +724,7 @@ void xbt_graph_export_graphxml(xbt_graph_t g, const char *filename, fprintf(file, "label=\"%s\" ", name); if ((node_data_print) && ((name = node_data_print(node->data)))) fprintf(file, "data=\"%s\" ", name); - fprintf(file, ">\n"); + fprintf(file, "/>\n"); } xbt_dynar_foreach(g->edges, cursor, edge) { fprintf(file, " length); if ((edge_data_print) && ((name = edge_data_print(edge->data)))) fprintf(file, "data=\"%s\" ", name); - fprintf(file, ">\n"); + fprintf(file, "/>\n"); } fprintf(file, "\n"); fclose(file); @@ -761,18 +755,18 @@ xbt_graph_t xbt_graph_load (const char *filename) //read the number of nodes size_t size; char *nnodes_str = NULL; - read = getline (&nnodes_str, &size, file); + read = xbt_getline (&nnodes_str, &size, file); if (read == -1) - THROWF(system_error, 0, "getline failed to read the number of nodes (errno = %d)", errno); + THROWF(system_error, 0, "xbt_getline failed to read the number of nodes (errno = %d)", errno); int i, nnodes = atoi (nnodes_str); free (nnodes_str); //read all nodes for (i = 0; i < nnodes; i++){ char *node_str = NULL; - read = getline (&node_str, &size, file); + read = xbt_getline (&node_str, &size, file); if (read == -1) - THROWF(system_error, 0, "getline failed to read all nodes (errno = %d)", errno); + THROWF(system_error, 0, "xbt_getline failed to read all nodes (errno = %d)", errno); xbt_node_t n; char *name = xbt_strdup (node_str); xbt_str_subst (name, '\n', '\0', 0); @@ -783,18 +777,18 @@ xbt_graph_t xbt_graph_load (const char *filename) //read the number of edges char *nedges_str = NULL; - read = getline (&nedges_str, &size, file); + read = xbt_getline (&nedges_str, &size, file); if (read == -1) - THROWF(system_error, 0, "getline failed to read the number of edges (errno = %d)", errno); + THROWF(system_error, 0, "xbt_getline failed to read the number of edges (errno = %d)", errno); int nedges = atoi (nedges_str); free (nedges_str); //read all edges for (i = 0; i < nedges; i++){ char *edge_str = NULL, edge_id[200], node_source[200], node_target[200]; - read = getline (&edge_str, &size, file); + read = xbt_getline (&edge_str, &size, file); if (read == -1) - THROWF(system_error, 0, "getline failed to read all edges (errno = %d)", errno); + THROWF(system_error, 0, "xbt_getline failed to read all edges (errno = %d)", errno); sscanf (edge_str, "%s %s %s", edge_id, node_source, node_target); free (edge_str); xbt_str_subst (edge_id, '\n', '\0', 0);