- else
-#endif
- { // Use XML parser
-
- int parse_status;
-
- /* init the flex parser */
- surfxml_buffer_stack_stack_ptr = 1;
- surfxml_buffer_stack_stack[0] = 0;
- after_config_done = 0;
- surf_parse_open(file);
-
- traces_set_list = xbt_dict_new_homogeneous(nullptr);
- trace_connect_list_host_avail = xbt_dict_new_homogeneous(free);
- trace_connect_list_host_speed = xbt_dict_new_homogeneous(free);
- trace_connect_list_link_avail = xbt_dict_new_homogeneous(free);
- trace_connect_list_link_bw = xbt_dict_new_homogeneous(free);
- trace_connect_list_link_lat = xbt_dict_new_homogeneous(free);
-
- /* Do the actual parsing */
- parse_status = surf_parse();
-
- /* connect all traces relative to hosts */
- xbt_dict_cursor_t cursor = nullptr;
- char* trace_name;
- char* elm;
-
- xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) {
- tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- xbt_assert(trace, "Trace %s undefined", trace_name);
-
- simgrid::s4u::Host *host = sg_host_by_name(elm);
- xbt_assert(host, "Host %s undefined", elm);
- simgrid::surf::Cpu *cpu = host->pimpl_cpu;
-
- cpu->setStateTrace(trace);
- }
- xbt_dict_foreach(trace_connect_list_host_speed, cursor, trace_name, elm) {
- tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- xbt_assert(trace, "Trace %s undefined", trace_name);
-
- simgrid::s4u::Host *host = sg_host_by_name(elm);
- xbt_assert(host, "Host %s undefined", elm);
- simgrid::surf::Cpu *cpu = host->pimpl_cpu;
-
- cpu->setSpeedTrace(trace);
- }
- xbt_dict_foreach(trace_connect_list_link_avail, cursor, trace_name, elm) {
- tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- xbt_assert(trace, "Trace %s undefined", trace_name);
- sg_link_t link = simgrid::s4u::Link::byName(elm);
- xbt_assert(link, "Link %s undefined", elm);
- link->setStateTrace(trace);
- }
-
- xbt_dict_foreach(trace_connect_list_link_bw, cursor, trace_name, elm) {
- tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- xbt_assert(trace, "Trace %s undefined", trace_name);
- sg_link_t link = simgrid::s4u::Link::byName(elm);
- xbt_assert(link, "Link %s undefined", elm);
- link->setBandwidthTrace(trace);
- }
-
- xbt_dict_foreach(trace_connect_list_link_lat, cursor, trace_name, elm) {
- tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- xbt_assert(trace, "Trace %s undefined", trace_name);
- sg_link_t link = simgrid::s4u::Link::byName(elm);
- xbt_assert(link, "Link %s undefined", elm);
- link->setLatencyTrace(trace);
- }
-
- /* Free my data */
- xbt_dict_free(&trace_connect_list_host_avail);
- xbt_dict_free(&trace_connect_list_host_speed);
- xbt_dict_free(&trace_connect_list_link_avail);
- xbt_dict_free(&trace_connect_list_link_bw);
- xbt_dict_free(&trace_connect_list_link_lat);
- xbt_dict_free(&traces_set_list);
-
- surf_parse_close();
-
- if (parse_status)
- surf_parse_error("Parse error in %s", file);