-static XBT_INLINE void surfxml_call_cb_functions(xbt_dynar_t cb_list)
-{
- unsigned int iterator;
- void_f_void_t fun;
- xbt_dynar_foreach(cb_list, iterator, fun) {
- DEBUG2("call %p %p", fun, *fun);
- (*fun) ();
- }
-}
-
-static void parse_route_set_endpoints(void)
-{
- route_link_list = xbt_dynar_new(sizeof(char *), NULL);
-}
-
-static void init_data(void)
-{
- xbt_dict_free(&route_table);
- xbt_dynar_free(&route_link_list);
- route_table = xbt_dict_new();
-
- if (!surfxml_bufferstack_stack)
- surfxml_bufferstack_stack = xbt_dynar_new(sizeof(char *), NULL);
- route_multi_table = xbt_dict_new();
- route_multi_elements = xbt_dynar_new(sizeof(char *), NULL);
- traces_set_list = xbt_dict_new();
- if (set_list == NULL)
- set_list = xbt_dict_new();
-
- trace_connect_list_host_avail = xbt_dict_new();
- trace_connect_list_power = xbt_dict_new();
- trace_connect_list_link_avail = xbt_dict_new();
- trace_connect_list_bandwidth = xbt_dict_new();
- trace_connect_list_latency = xbt_dict_new();
-
- random_data_list = xbt_dict_new();
- surfxml_add_callback(STag_surfxml_prop_cb_list, &parse_properties);
- surfxml_add_callback(ETag_surfxml_link_c_ctn_cb_list, &parse_route_elem);
- surfxml_add_callback(STag_surfxml_route_cb_list,
- &parse_route_set_endpoints);
- surfxml_add_callback(STag_surfxml_set_cb_list, &parse_sets);
- surfxml_add_callback(STag_surfxml_route_c_multi_cb_list,
- &parse_route_multi_set_endpoints);
- surfxml_add_callback(ETag_surfxml_route_c_multi_cb_list,
- &parse_route_multi_set_route);
- surfxml_add_callback(STag_surfxml_foreach_cb_list, &parse_foreach);
- surfxml_add_callback(STag_surfxml_cluster_cb_list, &parse_cluster);
- surfxml_add_callback(STag_surfxml_trace_cb_list, &parse_trace_init);
- surfxml_add_callback(ETag_surfxml_trace_cb_list, &parse_trace_finalize);
- surfxml_add_callback(STag_surfxml_trace_c_connect_cb_list,
- &parse_trace_c_connect);
- surfxml_add_callback(STag_surfxml_random_cb_list, &init_randomness);
- surfxml_add_callback(ETag_surfxml_random_cb_list, &add_randomness);
-}
-
-static void free_data(void)
-{
- char *key, *data;
- xbt_dict_cursor_t cursor = NULL;
- char *name;
- unsigned int cpt = 0;
-
- xbt_dict_foreach(route_table, cursor, key, data) {
- xbt_dynar_t links = (xbt_dynar_t) data;
- char *name;
- unsigned int cpt = 0;
-
- xbt_dynar_foreach(links, cpt, name) free(name);
- xbt_dynar_free(&links);
- }
- xbt_dict_free(&route_table);
- route_link_list = NULL;
-
- xbt_dict_free(&route_multi_table);
-
- xbt_dynar_foreach(route_multi_elements, cpt, name) free(name);
- xbt_dynar_free(&route_multi_elements);
-
- xbt_dict_foreach(set_list, cursor, key, data) {
- xbt_dynar_t set = (xbt_dynar_t) data;
-
- xbt_dynar_foreach(set, cpt, name) free(name);
- xbt_dynar_free(&set);
- }
- xbt_dict_free(&set_list);
-
- xbt_dynar_free(&surfxml_bufferstack_stack);
-
- xbt_dict_free(&traces_set_list);
- xbt_dict_free(&trace_connect_list_host_avail);
- xbt_dict_free(&trace_connect_list_power);
- xbt_dict_free(&trace_connect_list_link_avail);
- xbt_dict_free(&trace_connect_list_bandwidth);
- xbt_dict_free(&trace_connect_list_latency);
- xbt_dict_free(&traces_set_list);
-}
-
-void parse_platform_file(const char *file)
-{
- surf_parse_open(file);
- init_data();
- xbt_assert1((!(*surf_parse) ()), "Parse error in %s", file);
- free_data();
- surf_parse_close();
-}
-
-/* Functions to bypass route, host and link tags. Used by the foreach and route:multi tags */
-
-static void parse_make_temporary_route(const char *src, const char *dst,
- int action)
-{
- int AX_ptr = 0;
-
- A_surfxml_route_action = action;
- SURFXML_BUFFER_SET(route_src, src);
- SURFXML_BUFFER_SET(route_dst, dst);
-}
-
-static void parse_change_cpu_data(const char *hostName,
- const char *surfxml_host_power,
- const char *surfxml_host_availability,
- const char *surfxml_host_availability_file,
- const char *surfxml_host_state_file)
-{
- int AX_ptr = 0;
-
- SURFXML_BUFFER_SET(host_id, hostName);
- SURFXML_BUFFER_SET(host_power, surfxml_host_power /*hostPower */ );
- SURFXML_BUFFER_SET(host_availability, surfxml_host_availability);
- SURFXML_BUFFER_SET(host_availability_file, surfxml_host_availability_file);
- SURFXML_BUFFER_SET(host_state_file, surfxml_host_state_file);
-}
-
-static void parse_change_link_data(const char *linkName,
- const char *surfxml_link_bandwidth,
- const char *surfxml_link_bandwidth_file,
- const char *surfxml_link_latency,
- const char *surfxml_link_latency_file,
- const char *surfxml_link_state_file)