Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
a8463158d86e91560d2a639137c38f4a302645f8
[simgrid.git] / src / xbt / graphxml_parse.c
1 /*      $Id$     */
2
3 /* Copyright (c) 2006 Arnaud Legrand. All rights reserved.                  */
4
5 /* This program is free software; you can redistribute it and/or modify it
6  * under the terms of the license (GNU LGPL) which comes with this package. */
7
8 #include "xbt/misc.h"
9 #include "xbt/sysdep.h"
10 #include "xbt/log.h"
11 #include "xbt/asserts.h"
12
13 #include "xbt/dynar.h"
14 #include "xbt/graphxml_parse.h"
15
16 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(graphxml_parse, xbt ,"Logging specific to the graphxml parsing  module");
17
18 #undef CLEANUP
19 #include "graphxml.c"
20
21 static xbt_dynar_t xbt_graph_input_buffer_stack=NULL;
22 static xbt_dynar_t xbt_graph_file_to_parse_stack=NULL;
23
24 static void nil_function(void)
25 {
26   return;
27 }
28
29 void_f_void_t STag_graphxml_graph_fun = nil_function;
30 void_f_void_t ETag_graphxml_graph_fun = nil_function;
31 void_f_void_t STag_graphxml_node_fun = nil_function;
32 void_f_void_t ETag_graphxml_node_fun = nil_function;
33 void_f_void_t STag_graphxml_edge_fun = nil_function;
34 void_f_void_t ETag_graphxml_edge_fun = nil_function;
35
36 YY_BUFFER_STATE xbt_graph_input_buffer;
37 FILE *xbt_graph_file_to_parse;
38
39 void xbt_graph_parse_reset_parser(void)
40 {
41   STag_graphxml_graph_fun = nil_function;
42   ETag_graphxml_graph_fun = nil_function;
43   STag_graphxml_node_fun = nil_function;
44   ETag_graphxml_node_fun = nil_function;
45   STag_graphxml_edge_fun = nil_function;
46   ETag_graphxml_edge_fun = nil_function;
47 }
48
49 void STag_graphxml_graph(void)
50 {
51   STag_graphxml_graph_fun();
52 }
53
54 void ETag_graphxml_graph(void)
55 {
56   ETag_graphxml_graph_fun();
57 }
58
59
60 void STag_graphxml_node(void)
61 {
62   STag_graphxml_node_fun();
63 }
64
65 void ETag_graphxml_node(void)
66 {
67   ETag_graphxml_node_fun();
68 }
69
70
71 void STag_graphxml_edge(void)
72 {
73   STag_graphxml_edge_fun();
74 }
75
76 void ETag_graphxml_edge(void)
77 {
78   ETag_graphxml_edge_fun();
79 }
80
81
82
83 void  xbt_graph_parse_open(const char *file) {
84   if(!file) {
85     WARN0("I hope you know what you're doing... you just gave me a NULL pointer!");
86     return;
87   }
88   if(!xbt_graph_input_buffer_stack) 
89     xbt_graph_input_buffer_stack = xbt_dynar_new(sizeof(YY_BUFFER_STATE),NULL);
90   if(!xbt_graph_file_to_parse_stack) 
91     xbt_graph_file_to_parse_stack = xbt_dynar_new(sizeof(FILE*),NULL);
92
93   xbt_graph_file_to_parse = fopen(file,"r");  /* FIXME should use something like surf_fopen */
94   xbt_assert1((xbt_graph_file_to_parse), "Unable to open \"%s\"\n",file);
95   xbt_graph_input_buffer = xbt_graph_parse__create_buffer( xbt_graph_file_to_parse, 10);
96   xbt_graph_parse__switch_to_buffer(xbt_graph_input_buffer);
97   xbt_graph_parse_lineno = 1;
98 }
99
100 void  xbt_graph_parse_close(void) {
101   if(xbt_graph_input_buffer_stack) 
102     xbt_dynar_free(&xbt_graph_input_buffer_stack);
103   if(xbt_graph_file_to_parse_stack) 
104     xbt_dynar_free(&xbt_graph_file_to_parse_stack);
105
106   if(xbt_graph_file_to_parse) {
107     xbt_graph_parse__delete_buffer(xbt_graph_input_buffer);
108     fclose(xbt_graph_file_to_parse);
109   }
110 }
111
112
113 static int _xbt_graph_parse(void)
114 {
115   return xbt_graph_parse_lex();
116 }
117
118 int_f_void_t xbt_graph_parse = _xbt_graph_parse;
119
120 void xbt_graph_parse_get_double(double *value,const char *string)
121
122   int ret = 0;
123
124   ret = sscanf(string, "%lg", value);
125   xbt_assert2((ret==1), "Parse error line %d : %s not a number", xbt_graph_parse_lineno,
126               string);
127 }
128