X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0446fc9e3f379b9aff5e0bb44cf06d06b9e663cc..0e16ef4c4c660214ac42b733a0abc6f6c12e9ef3:/src/surf/surfxml_parse.c diff --git a/src/surf/surfxml_parse.c b/src/surf/surfxml_parse.c index 863a15b68a..fa7e68167f 100644 --- a/src/surf/surfxml_parse.c +++ b/src/surf/surfxml_parse.c @@ -7,6 +7,7 @@ #include "xbt/misc.h" #include "xbt/log.h" +#include "xbt/dict.h" #include "surf/surfxml_parse_private.h" #include "surf/surf_private.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(parse, surf, @@ -15,53 +16,62 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(parse, surf, #undef CLEANUP #include "surfxml.c" +/* make sure these symbols are defined as strong ones in this file so that the linked can resolve them */ +xbt_dynar_t STag_surfxml_platform_description_cb_list = NULL; +xbt_dynar_t ETag_surfxml_platform_description_cb_list = NULL; +xbt_dynar_t STag_surfxml_host_cb_list = NULL; +xbt_dynar_t ETag_surfxml_host_cb_list = NULL; +xbt_dynar_t STag_surfxml_router_cb_list = NULL; +xbt_dynar_t ETag_surfxml_router_cb_list = NULL; +xbt_dynar_t STag_surfxml_link_cb_list = NULL; +xbt_dynar_t ETag_surfxml_link_cb_list = NULL; +xbt_dynar_t STag_surfxml_route_cb_list = NULL; +xbt_dynar_t ETag_surfxml_route_cb_list = NULL; +xbt_dynar_t STag_surfxml_link_c_ctn_cb_list = NULL; +xbt_dynar_t ETag_surfxml_link_c_ctn_cb_list = NULL; +xbt_dynar_t STag_surfxml_process_cb_list = NULL; +xbt_dynar_t ETag_surfxml_process_cb_list = NULL; +xbt_dynar_t STag_surfxml_argument_cb_list = NULL; +xbt_dynar_t ETag_surfxml_argument_cb_list = NULL; +xbt_dynar_t STag_surfxml_prop_cb_list = NULL; +xbt_dynar_t ETag_surfxml_prop_cb_list = NULL; + static xbt_dynar_t surf_input_buffer_stack = NULL; static xbt_dynar_t surf_file_to_parse_stack = NULL; +void surfxml_call_cb_functions(xbt_dynar_t); + void nil_function(void); void nil_function(void) { return; } -void_f_void_t STag_surfxml_platform_description_fun = nil_function; -void_f_void_t ETag_surfxml_platform_description_fun = nil_function; -void_f_void_t STag_surfxml_cpu_fun = nil_function; -void_f_void_t ETag_surfxml_cpu_fun = nil_function; -void_f_void_t STag_surfxml_router_fun = nil_function; -void_f_void_t ETag_surfxml_router_fun = nil_function; -void_f_void_t STag_surfxml_network_link_fun = nil_function; -void_f_void_t ETag_surfxml_network_link_fun = nil_function; -void_f_void_t STag_surfxml_route_fun = nil_function; -void_f_void_t ETag_surfxml_route_fun = nil_function; -void_f_void_t STag_surfxml_route_element_fun = nil_function; -void_f_void_t ETag_surfxml_route_element_fun = nil_function; -void_f_void_t STag_surfxml_process_fun = nil_function; -void_f_void_t ETag_surfxml_process_fun = nil_function; -void_f_void_t STag_surfxml_argument_fun = nil_function; -void_f_void_t ETag_surfxml_argument_fun = nil_function; - YY_BUFFER_STATE surf_input_buffer; FILE *surf_file_to_parse; void surf_parse_reset_parser(void) { - STag_surfxml_platform_description_fun = nil_function; - ETag_surfxml_platform_description_fun = nil_function; - STag_surfxml_cpu_fun = nil_function; - ETag_surfxml_cpu_fun = nil_function; - STag_surfxml_router_fun = nil_function; - ETag_surfxml_router_fun = nil_function; - STag_surfxml_network_link_fun = nil_function; - ETag_surfxml_network_link_fun = nil_function; - STag_surfxml_route_fun = nil_function; - ETag_surfxml_route_fun = nil_function; - STag_surfxml_route_element_fun = nil_function; - ETag_surfxml_route_element_fun = nil_function; - STag_surfxml_process_fun = nil_function; - ETag_surfxml_process_fun = nil_function; - STag_surfxml_argument_fun = nil_function; - ETag_surfxml_argument_fun = nil_function; + + STag_surfxml_platform_description_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + ETag_surfxml_platform_description_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + STag_surfxml_host_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + ETag_surfxml_host_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + STag_surfxml_router_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + ETag_surfxml_router_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + STag_surfxml_link_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + ETag_surfxml_link_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + STag_surfxml_route_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + ETag_surfxml_route_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + STag_surfxml_link_c_ctn_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + ETag_surfxml_link_c_ctn_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + STag_surfxml_process_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + ETag_surfxml_process_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + STag_surfxml_argument_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + ETag_surfxml_argument_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + STag_surfxml_prop_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + ETag_surfxml_prop_cb_list = xbt_dynar_new(sizeof(void_f_void_t),&free); + } void STag_surfxml_include(void) @@ -95,7 +105,7 @@ void STag_surfxml_platform_description(void) sscanf(A_surfxml_platform_description_version, "%lg", &version); xbt_assert0((version >= 1.0), "******* BIG FAT WARNING *********\n " - "You're using an old XML file. " + "You're using an ancient XML file. " "Since SimGrid 3.1, units are Bytes, Flops, and seconds " "instead of MBytes, MFlops and seconds. " "A script (surfxml_update.pl) to help you convert your old " @@ -105,85 +115,101 @@ void STag_surfxml_platform_description(void) "SURF section of the ChangeLog for the 3.1 version. " "Last, do not forget to also update your values for " "the calls to MSG_task_create (if any)."); + xbt_assert0((version >= 2.0), "******* BIG FAT WARNING *********\n " + "You're using an old XML file. " + "A script (surfxml_update.pl) to help you convert your old " + "platform files " + "is available in the contrib/platform_generation directory " + "of the simgrid repository."); - (*STag_surfxml_platform_description_fun)(); + surfxml_call_cb_functions(STag_surfxml_platform_description_cb_list); } void ETag_surfxml_platform_description(void) { - (*ETag_surfxml_platform_description_fun)(); + surfxml_call_cb_functions(ETag_surfxml_platform_description_cb_list); } -void STag_surfxml_cpu(void) +void STag_surfxml_host(void) { - (*STag_surfxml_cpu_fun)(); + surfxml_call_cb_functions(STag_surfxml_host_cb_list); } -void ETag_surfxml_cpu(void) +void ETag_surfxml_host(void) { - (*ETag_surfxml_cpu_fun)(); + surfxml_call_cb_functions(ETag_surfxml_host_cb_list); } void STag_surfxml_router(void) { - (*STag_surfxml_router_fun)(); + surfxml_call_cb_functions(STag_surfxml_router_cb_list); } void ETag_surfxml_router(void) { - (*ETag_surfxml_router_fun)(); + surfxml_call_cb_functions(ETag_surfxml_router_cb_list); } -void STag_surfxml_network_link(void) +void STag_surfxml_link(void) { - (*STag_surfxml_network_link_fun)(); + surfxml_call_cb_functions(STag_surfxml_link_cb_list); } -void ETag_surfxml_network_link(void) +void ETag_surfxml_link(void) { - (*ETag_surfxml_network_link_fun)(); + surfxml_call_cb_functions(ETag_surfxml_link_cb_list); } void STag_surfxml_route(void) { - (*STag_surfxml_route_fun)(); + surfxml_call_cb_functions(STag_surfxml_route_cb_list); } void ETag_surfxml_route(void) { - (*ETag_surfxml_route_fun)(); + surfxml_call_cb_functions(ETag_surfxml_route_cb_list); } -void STag_surfxml_route_element(void) +void STag_surfxml_link_c_ctn(void) { - (*STag_surfxml_route_element_fun)(); + surfxml_call_cb_functions(STag_surfxml_link_c_ctn_cb_list); } -void ETag_surfxml_route_element(void) +void ETag_surfxml_link_c_ctn(void) { - (*ETag_surfxml_route_element_fun)(); + surfxml_call_cb_functions(ETag_surfxml_link_c_ctn_cb_list); } void STag_surfxml_process(void) { - (*STag_surfxml_process_fun)(); + surfxml_call_cb_functions(STag_surfxml_process_cb_list); } void ETag_surfxml_process(void) { - (*ETag_surfxml_process_fun)(); + surfxml_call_cb_functions(ETag_surfxml_process_cb_list); } void STag_surfxml_argument(void) { - (*STag_surfxml_argument_fun)(); + surfxml_call_cb_functions(STag_surfxml_argument_cb_list); } void ETag_surfxml_argument(void) { - (*ETag_surfxml_argument_fun)(); + surfxml_call_cb_functions(ETag_surfxml_argument_cb_list); +} + +void STag_surfxml_prop(void) +{ + surfxml_call_cb_functions(STag_surfxml_prop_cb_list); +} +void ETag_surfxml_prop(void) +{ + surfxml_call_cb_functions(ETag_surfxml_prop_cb_list); } + void surf_parse_open(const char *file) { static int warned = 0; /* warn only once */ @@ -244,3 +270,34 @@ void surf_parse_get_trace(tmgr_trace_t * trace, const char *string) else *trace = tmgr_trace_new(string); } + +void parse_properties(void) +{ + char *value = NULL; + + if(!current_property_set) current_property_set = xbt_dict_new(); + + value = xbt_strdup(A_surfxml_prop_value); + xbt_dict_set(current_property_set, A_surfxml_prop_id, value, free); + +} + +void free_string(void *d) +{ + free(*(void**)d); +} + +void surfxml_add_callback(xbt_dynar_t cb_list, void_f_void_t function) +{ + xbt_dynar_push(cb_list, &function); +} + +void surfxml_call_cb_functions(xbt_dynar_t cb_list) +{ + int iterator; + void_f_void_t fun; + xbt_dynar_foreach(cb_list, iterator, fun){ + DEBUG2("call %p %p",fun,*fun); + (*fun)(); + } +}