+static xbt_dynar_t surf_input_buffer_stack = NULL;
+static xbt_dynar_t surf_file_to_parse_stack = NULL;
+
+void STag_surfxml_include(void)
+{
+ XBT_INFO("STag_surfxml_include '%s'",A_surfxml_include_file);
+ xbt_dynar_push(surf_file_to_parse_stack, &surf_file_to_parse);
+
+ surf_file_to_parse = surf_fopen(A_surfxml_include_file, "r");
+ xbt_assert((surf_file_to_parse), "Unable to open \"%s\"\n",
+ A_surfxml_include_file);
+ surf_input_buffer = surf_parse__create_buffer(surf_file_to_parse, YY_BUF_SIZE);
+ surf_parse_push_buffer_state(surf_input_buffer);
+ fflush(NULL);
+}
+
+void ETag_surfxml_include(void)
+{
+ fflush(NULL);
+ fclose(surf_file_to_parse);
+ xbt_dynar_pop(surf_file_to_parse_stack, &surf_file_to_parse);
+ surf_parse_pop_buffer_state();
+ XBT_INFO("ETag_surfxml_include '%s'",A_surfxml_include_file);
+}
+
+/*
+ * This function return 0 or 1 if callbacks are empty or not.
+ */
+int surf_parse_no_callbacks(void)
+{
+ return xbt_dynar_is_empty(STag_surfxml_platform_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_platform_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_host_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_host_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_router_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_router_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_link_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_link_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_route_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_route_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_link_ctn_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_link_ctn_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_process_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_process_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_argument_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_argument_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_prop_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_prop_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_trace_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_trace_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_trace_connect_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_trace_connect_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_random_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_random_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_AS_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_AS_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_ASroute_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_ASroute_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_bypassRoute_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_bypassRoute_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_cluster_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_cluster_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_peer_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_peer_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_config_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_config_cb_list) &&
+ xbt_dynar_is_empty(STag_surfxml_include_cb_list) &&
+ xbt_dynar_is_empty(ETag_surfxml_include_cb_list);
+}
+
+void surf_parse_init_callbacks(void)
+{
+ STag_surfxml_platform_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_platform_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_host_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_host_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_router_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_router_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_link_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_link_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_route_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_route_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_link_ctn_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_link_ctn_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_process_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_process_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_argument_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_argument_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_prop_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_prop_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_trace_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_trace_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_trace_connect_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_trace_connect_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_random_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_random_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_AS_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_AS_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_ASroute_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_ASroute_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_bypassRoute_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_bypassRoute_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_cluster_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_cluster_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_peer_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_peer_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_config_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_config_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ STag_surfxml_include_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+ ETag_surfxml_include_cb_list =
+ xbt_dynar_new(sizeof(void_f_void_t), NULL);
+}
+
+void surf_parse_reset_callbacks(void)
+{
+ surf_parse_free_callbacks();
+ surf_parse_init_callbacks();
+}
+