typedef struct xbt_graph *xbt_graph_t;
/* API */
-xbt_graph_t xbt_graph_new_graph(const char *name,
- unsigned short int directed, void *data);
-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_node_t src, xbt_node_t dst, void *data);
+xbt_graph_t xbt_graph_new_graph(unsigned short int directed, void *data);
+xbt_node_t xbt_graph_new_node(xbt_graph_t g, void *data);
+xbt_edge_t xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst,
+ void *data);
void xbt_graph_remove_node(xbt_graph_t g, xbt_node_t n,
void_f_pvoid_t *free_function);
void_f_pvoid_t *edge_free_function,
void_f_pvoid_t *graph_free_function);
+xbt_graph_t xbt_graph_read(const char *filename);
+
/* Not implemented yet ! */
void xbt_export_graphviz(xbt_graph_t g, const char *filename,
const char *(node_name)(xbt_node_t),
#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;
}
}
+
+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;
+}