inline unsigned int* rankId_to_coords(int rankId, xbt_dynar_t dimensions)
{
- unsigned int cur_dim_size = 1;
+ unsigned int cur_dim_size;
unsigned int dim_size_product = 1;
- unsigned int* coords = (unsigned int*)malloc(xbt_dynar_length(dimensions) * sizeof(unsigned int));
- for (unsigned int i = 0; i < xbt_dynar_length(dimensions); i++) {
- cur_dim_size = xbt_dynar_get_as(dimensions, i, int);
+ unsigned int* coords = new unsigned int[xbt_dynar_length(dimensions)];
+ unsigned int i;
+ xbt_dynar_foreach(dimensions,i, cur_dim_size) {
coords[i] = (rankId / dim_size_product) % cur_dim_size;
dim_size_product *= cur_dim_size;
}
int dim_product = 1; // Needed to calculate the next neighbor_id
for (unsigned int j = 0; j < xbt_dynar_length(dimensions_); j++) {
- s_sg_platf_link_cbarg_t link;
- memset(&link, 0, sizeof(link));
+ LinkCreationArgs link;
current_dimension = xbt_dynar_get_as(dimensions_, j, int);
neighbor_rank_id = ((static_cast<int>(rank) / dim_product) % current_dimension == current_dimension - 1)
? rank - (current_dimension - 1) * dim_product
current_node = next_node;
next_node = 0;
}
- free(myCoords);
- free(targetCoords);
+ delete[] myCoords;
+ delete[] targetCoords;
}
}
}