-static void __parse_edge(void) {
- DEBUG2("<edge source=\"%s\" target=\"%s\"/>",A_graphxml_edge_source,
- A_graphxml_edge_target);
+
+/** @brief Destructor
+ * @param g: poor victim
+ * @param node_free_function: function to use to free data associated to each node
+ * @param edge_free_function: function to use to free data associated to each edge
+ * @param graph_free_function: function to use to free data associated to g
+ *
+ * Free the graph structure.
+ */
+void xbt_graph_free_graph(xbt_graph_t g, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function,
+ void_f_pvoid_t graph_free_function)
+{
+ 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_free(&(g->nodes));
+
+ if (graph_free_function)
+ graph_free_function(g->data);
+ free(g);