- if (surf_cpu_model)
- set = surf_model_resource_set(surf_cpu_model);
- if (surf_workstation_model != NULL &&
- surf_model_resource_set(surf_workstation_model) != NULL &&
- xbt_dict_length(surf_model_resource_set(surf_workstation_model)) > 0)
- set = surf_model_resource_set(surf_workstation_model);
-
-
- surfxml_bufferstack_push(0);
- /* Get all routes in the exact order they were entered in the platform file */
- xbt_dynar_foreach(route_multi_elements, cursor, key) {
- /* Get links for the route */
- links = (xbt_dynar_t) xbt_dict_get_or_null(route_multi_table, key);
- keys = xbt_str_split_str(key, sep);
- /* Get route ends */
- src = xbt_dynar_get_as(keys, 0, char *);
- dst = xbt_dynar_get_as(keys, 1, char *);
- route_action = atoi(xbt_dynar_get_as(keys, 2, char *));
- symmetric = atoi(xbt_dynar_get_as(keys, 3, char *));
-
- /* Create the dynar of src and dst hosts for the new routes */
- /* NOTE: src and dst can be either set names or simple host names */
- src_names = (xbt_dynar_t) xbt_dict_get_or_null(set_list, src);
- dst_names = (xbt_dynar_t) xbt_dict_get_or_null(set_list, dst);
- /* Add to dynar even if they are simple names */
- if (src_names == NULL) {
- src_names = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
- val = xbt_strdup(src);
- xbt_dynar_push(src_names, &val);
- if (strcmp(val, "$*") != 0 && NULL == xbt_dict_get_or_null(set, val))
- THROW3(unknown_error, 0,
- "(In route:multi (%s -> %s) source %s does not exist (not a set or a host)",
- src, dst, src);
- }
- if (dst_names == NULL) {
- dst_names = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
- val = xbt_strdup(dst);
- if (strcmp(val, "$*") != 0 && NULL == xbt_dict_get_or_null(set, val))
- THROW3(unknown_error, 0,
- "(In route:multi (%s -> %s) destination %s does not exist (not a set or a host)",
- src, dst, dst);
- xbt_dynar_push(dst_names, &val);
- }
-
- /* Build the routes */
- DEBUG2("ADDING MULTI ROUTE: %s -> %s", xbt_dynar_get_as(keys, 0, char *),
- xbt_dynar_get_as(keys, 1, char *));
- xbt_dynar_foreach(src_names, cpt, src_host_name) {
- xbt_dynar_foreach(dst_names, cpt2, dst_host_name) {
- /* If dst is $* then set this route to have its dst point to all hosts */
- if (strcmp(src_host_name, "$*") != 0
- && strcmp(dst_host_name, "$*") == 0) {
- xbt_dict_foreach(set, cursor_w, key_w, data_w) {
- //int n = xbt_dynar_member(src_names, (char*)key_w);
- add_multi_links(src, dst, links, src_host_name, key_w);
- }
- }
- /* If src is $* then set this route to have its dst point to all hosts */
- if (strcmp(src_host_name, "$*") == 0
- && strcmp(dst_host_name, "$*") != 0) {
- xbt_dict_foreach(set, cursor_w, key_w, data_w) {
- // if (!symmetric || (symmetric && !contains(dst_names, key_w)))
- add_multi_links(src, dst, links, key_w, dst_host_name);
- }
- }
- /* if none of them are equal to $* */
- if (strcmp(src_host_name, "$*") != 0
- && strcmp(dst_host_name, "$*") != 0) {
- add_multi_links(src, dst, links, src_host_name, dst_host_name);
- }
- }
- }
- xbt_dynar_free(&keys);