X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/22e6546d2c6f14864cc93c4ed1470d8e8c1e2d95..0dee9cbc87dea5ed5ee6b69d1492c72649d6c606:/src/surf/maxmin.cpp diff --git a/src/surf/maxmin.cpp b/src/surf/maxmin.cpp index 72d2005543..f65e4e96c9 100644 --- a/src/surf/maxmin.cpp +++ b/src/surf/maxmin.cpp @@ -13,15 +13,11 @@ #include #include #include +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_maxmin, surf, "Logging specific to SURF (maxmin)"); -struct s_dyn_light_t { - int *data; - int pos; - int size; -}; -typedef s_dyn_light_t* dyn_light_t; +typedef std::vector dyn_light_t; double sg_maxmin_precision = 0.00001; /* Change this with --cfg=maxmin/precision:VALUE */ double sg_surf_precision = 0.00001; /* Change this with --cfg=surf/precision:VALUE */ @@ -181,7 +177,7 @@ lmm_system_t lmm_system_new(bool selective_update) s_lmm_variable_t var; s_lmm_constraint_t cnst; - lmm_system_t l = xbt_new0(s_lmm_system_t, 1); + lmm_system_t l = new s_lmm_system_t(); l->modified = 0; l->selective_update_active = selective_update; @@ -229,13 +225,13 @@ void lmm_system_free(lmm_system_t sys) lmm_cnst_free(sys, cnst); xbt_mallocator_free(sys->variable_mallocator); - free(sys); + delete sys; } static inline void lmm_cnst_free(lmm_system_t sys, lmm_constraint_t cnst) { make_constraint_inactive(sys, cnst); - free(cnst); + delete cnst; } lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id, double bound_value) @@ -243,8 +239,8 @@ lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id, double bound_val lmm_constraint_t cnst = nullptr; s_lmm_element_t elem; - cnst = xbt_new0(s_lmm_constraint_t, 1); - cnst->id = id; + cnst = new s_lmm_constraint_t(); + cnst->id = id; cnst->id_int = Global_const_debug_id++; xbt_swag_init(&(cnst->enabled_element_set), xbt_swag_offset(elem, enabled_element_set_hookup)); xbt_swag_init(&(cnst->disabled_element_set), xbt_swag_offset(elem, disabled_element_set_hookup)); @@ -314,7 +310,7 @@ inline void lmm_constraint_free(lmm_system_t sys,lmm_constraint_t cnst) static void *lmm_variable_mallocator_new_f() { - lmm_variable_t var = xbt_new(s_lmm_variable_t, 1); + lmm_variable_t var = new s_lmm_variable_t; var->cnsts = nullptr; /* will be created by realloc */ return var; } @@ -322,7 +318,7 @@ static void *lmm_variable_mallocator_new_f() static void lmm_variable_mallocator_free_f(void *var) { xbt_free(((lmm_variable_t) var)->cnsts); - xbt_free(var); + delete static_cast(var); } lmm_variable_t lmm_variable_new(lmm_system_t sys, simgrid::surf::Action* id, double sharing_weight, double bound, @@ -629,40 +625,29 @@ void *lmm_variable_id(lmm_variable_t var) } static inline void saturated_constraint_set_update(double usage, int cnst_light_num, - dyn_light_t saturated_constraint_set, double *min_usage) + dyn_light_t& saturated_constraint_set, double* min_usage) { xbt_assert(usage > 0,"Impossible"); if (*min_usage < 0 || *min_usage > usage) { *min_usage = usage; XBT_HERE(" min_usage=%f (cnst->remaining / cnst->usage =%f)", *min_usage, usage); - saturated_constraint_set->data[0] = cnst_light_num; - saturated_constraint_set->pos = 1; + saturated_constraint_set.assign(1, cnst_light_num); } else if (*min_usage == usage) { - if(saturated_constraint_set->pos == saturated_constraint_set->size) { // realloc the size - saturated_constraint_set->size *= 2; - saturated_constraint_set->data = - (int*) xbt_realloc(saturated_constraint_set->data, (saturated_constraint_set->size) * sizeof(int)); - } - saturated_constraint_set->data[saturated_constraint_set->pos] = cnst_light_num; - saturated_constraint_set->pos++; + saturated_constraint_set.emplace_back(cnst_light_num); } } -static inline void saturated_variable_set_update(s_lmm_constraint_light_t *cnst_light_tab, - dyn_light_t saturated_constraint_set, lmm_system_t sys) +static inline void saturated_variable_set_update(s_lmm_constraint_light_t* cnst_light_tab, + const dyn_light_t& saturated_constraint_set, lmm_system_t sys) { /* Add active variables (i.e. variables that need to be set) from the set of constraints to saturate (cnst_light_tab)*/ - lmm_constraint_light_t cnst = nullptr; - void *_elem; - lmm_element_t elem = nullptr; - xbt_swag_t elem_list = nullptr; - int i; - for(i = 0; i< saturated_constraint_set->pos; i++){ - cnst = &cnst_light_tab[saturated_constraint_set->data[i]]; - elem_list = &(cnst->cnst->active_element_set); + for (int const& saturated_cnst : saturated_constraint_set) { + lmm_constraint_light_t cnst = &cnst_light_tab[saturated_cnst]; + void* _elem; + xbt_swag_t elem_list = &(cnst->cnst->active_element_set); xbt_swag_foreach(_elem, elem_list) { - elem = (lmm_element_t)_elem; + lmm_element_t elem = (lmm_element_t)_elem; //Visiting active_element_set, so, by construction, should never get a zero weight, correct? xbt_assert(elem->variable->sharing_weight > 0); if (elem->consumption_weight > 0) @@ -774,12 +759,9 @@ void lmm_solve(lmm_system_t sys) } } - s_lmm_constraint_light_t* cnst_light_tab = - static_cast(xbt_malloc0(xbt_swag_size(cnst_list) * sizeof(s_lmm_constraint_light_t))); + s_lmm_constraint_light_t* cnst_light_tab = new s_lmm_constraint_light_t[xbt_swag_size(cnst_list)](); int cnst_light_num = 0; - dyn_light_t saturated_constraint_set = xbt_new0(s_dyn_light_t,1); - saturated_constraint_set->size = 5; - saturated_constraint_set->data = xbt_new0(int, saturated_constraint_set->size); + dyn_light_t saturated_constraint_set; xbt_swag_foreach_safe(_cnst, _cnst_next, cnst_list) { lmm_constraint_t cnst = (lmm_constraint_t)_cnst; @@ -929,7 +911,7 @@ void lmm_solve(lmm_system_t sys) /* Find out which variables reach the maximum */ min_usage = -1; min_bound = -1; - saturated_constraint_set->pos = 0; + saturated_constraint_set.clear(); int pos; for(pos=0; posactive_element_set.count>0, "Cannot saturate more a constraint that has" @@ -955,9 +937,7 @@ void lmm_solve(lmm_system_t sys) lmm_check_concurrency(sys); - xbt_free(saturated_constraint_set->data); - xbt_free(saturated_constraint_set); - xbt_free(cnst_light_tab); + delete[] cnst_light_tab; XBT_OUT(); }