void AsDijkstra::newRoute(int src_id, int dst_id, sg_platf_route_cbarg_t e_route) { XBT_DEBUG("Load Route from \"%d\" to \"%d\"", src_id, dst_id); xbt_node_t src = nullptr; xbt_node_t dst = nullptr; graph_node_map_element_t src_elm = nodeMapSearch(src_id); graph_node_map_element_t dst_elm = nodeMapSearch(dst_id); if (src_elm) src = src_elm->node; if (dst_elm) dst = dst_elm->node; /* add nodes if they don't exist in the graph */ if (src_id == dst_id && src == nullptr && dst == nullptr) { src = this->routeGraphNewNode(src_id, -1); dst = src; } else { if (src == nullptr) { src = this->routeGraphNewNode(src_id, -1); } if (dst == nullptr) { dst = this->routeGraphNewNode(dst_id, -1); } } /* add link as edge to graph */ xbt_graph_new_edge(routeGraph_, src, dst, e_route); }
xbt_edge_t new_xbt_graph_edge(xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xbt_dict_t edges) { const char *sn = instr_node_name(s); const char *dn = instr_node_name(d); int len = strlen(sn) + strlen(dn) + 1; char *name = (char *) xbt_malloc(len * sizeof(char)); snprintf(name, len, "%s%s", sn, dn); xbt_edge_t ret = (xbt_edge_t) xbt_dict_get_or_null(edges, name); if (ret == nullptr) { snprintf(name, len, "%s%s", dn, sn); ret = (xbt_edge_t) xbt_dict_get_or_null(edges, name); } if (ret == nullptr) { ret = xbt_graph_new_edge(graph, s, d, nullptr); xbt_dict_set(edges, name, ret, nullptr); } free(name); return ret; }
static void route_new_dijkstra(as_dijkstra_t as, int src_id, int dst_id, sg_platf_route_cbarg_t e_route) { XBT_DEBUG("Load Route from \"%d\" to \"%d\"", src_id, dst_id); xbt_node_t src = NULL; xbt_node_t dst = NULL; graph_node_map_element_t src_elm = (graph_node_map_element_t) xbt_dict_get_or_null_ext(as->graph_node_map, (char *) (&src_id), sizeof(int)); graph_node_map_element_t dst_elm = (graph_node_map_element_t) xbt_dict_get_or_null_ext(as->graph_node_map, (char *) (&dst_id), sizeof(int)); if (src_elm) src = src_elm->node; if (dst_elm) dst = dst_elm->node; /* add nodes if they don't exist in the graph */ if (src_id == dst_id && src == NULL && dst == NULL) { src = route_graph_new_node(as, src_id, -1); dst = src; } else { if (src == NULL) { src = route_graph_new_node(as, src_id, -1); } if (dst == NULL) { dst = route_graph_new_node(as, dst_id, -1); } } /* add link as edge to graph */ xbt_graph_new_edge(as->route_graph, src, dst, e_route); }