From fe66dea314bdfd12ce0d8ecfd214b174d3d218ea Mon Sep 17 00:00:00 2001 From: alegrand Date: Tue, 23 Nov 2004 22:16:18 +0000 Subject: [PATCH] rename xbt_swag_extract to xbt_swag_remove and add a xbt_swag_extract that does what it would be expected to do... :) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@523 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- include/xbt/swag.h | 3 ++- src/surf/maxmin.c | 8 ++++---- src/surf/maxmin_private.h | 16 ++++++++-------- src/surf/surf.c | 2 +- src/xbt/swag.c | 23 ++++++++++++++++++++++- testsuite/xbt/swag_usage.c | 4 ++-- 6 files changed, 39 insertions(+), 17 deletions(-) diff --git a/include/xbt/swag.h b/include/xbt/swag.h index 5af75a74e6..1cfe70d6fc 100644 --- a/include/xbt/swag.h +++ b/include/xbt/swag.h @@ -28,7 +28,8 @@ typedef struct xbt_swag { xbt_swag_t xbt_swag_new(size_t offset); void xbt_swag_init(xbt_swag_t swag, size_t offset); void xbt_swag_insert(void *obj, xbt_swag_t swag); -void *xbt_swag_extract(void *obj, xbt_swag_t swag); +void *xbt_swag_remove(void *obj, xbt_swag_t swag); +void *xbt_swag_extract(xbt_swag_t swag); int xbt_swag_size(xbt_swag_t swag); int xbt_swag_belongs(void *obj, xbt_swag_t swag); diff --git a/src/surf/maxmin.c b/src/surf/maxmin.c index 018d6b03c8..3a1c4e2302 100644 --- a/src/surf/maxmin.c +++ b/src/surf/maxmin.c @@ -64,7 +64,7 @@ static void lmm_var_free(lmm_system_t sys, lmm_variable_t var) for (i = 0; i < var->cnsts_number; i++) { elem = &var->cnsts[i]; - xbt_swag_extract(elem, &(elem->constraint->element_set)); + xbt_swag_remove(elem, &(elem->constraint->element_set)); if (xbt_swag_size(&(elem->constraint->element_set))) make_constraint_inactive(sys, elem->constraint); } @@ -174,7 +174,7 @@ static void saturated_constraints_update(lmm_system_t sys, *min_usage = cnst->remaining / cnst->usage; while ((useless_cnst = xbt_swag_getFirst(&(sys->saturated_constraint_set)))) - xbt_swag_extract(useless_cnst, &(sys->saturated_constraint_set)); + xbt_swag_remove(useless_cnst, &(sys->saturated_constraint_set)); xbt_swag_insert(cnst, &(sys->saturated_constraint_set)); } else if (*min_usage == cnst->remaining / cnst->usage) { @@ -195,7 +195,7 @@ static void saturated_variables_update(lmm_system_t sys) elem_list = &(cnst->active_element_set); xbt_swag_foreach(elem, elem_list) xbt_swag_insert(elem->variable, &(sys->saturated_variable_set)); - xbt_swag_extract(cnst, cnst_list); + xbt_swag_remove(cnst, cnst_list); } } @@ -266,7 +266,7 @@ void lmm_solve(lmm_system_t sys) cnst->usage -= elem->value / var->weight; remove_active_elem_in_constraint(elem); } - xbt_swag_extract(var, var_list); + xbt_swag_remove(var, var_list); } /* Find out which variables reach the maximum */ diff --git a/src/surf/maxmin_private.h b/src/surf/maxmin_private.h index 04047843f2..5a870d1f7d 100644 --- a/src/surf/maxmin_private.h +++ b/src/surf/maxmin_private.h @@ -20,7 +20,7 @@ typedef struct lmm_element { } s_lmm_element_t, *lmm_element_t; #define insert_elem_in_constraint(elem) xbt_swag_insert(elem,&(elem->constraint->element_set)) #define insert_active_elem_in_constraint(elem) xbt_swag_insert(elem,&(elem->constraint->active_element_set)) -#define remove_active_elem_in_constraint(elem) xbt_swag_extract(elem,&(elem->constraint->active_element_set)) +#define remove_active_elem_in_constraint(elem) xbt_swag_remove(elem,&(elem->constraint->active_element_set)) typedef struct lmm_constraint { /* hookup to system */ @@ -60,15 +60,15 @@ typedef struct lmm_system { s_xbt_swag_t saturated_constraint_set; /* a list of lmm_constraint_t_t */ } s_lmm_system_t; -#define extract_variable(sys) xbt_swag_extract(xbt_swag_getFirst(&(sys->variable_set)),&(sys->variable_set)) -#define extract_constraint(sys) xbt_swag_extract(xbt_swag_getFirst(&(sys->constraint_set)),&(sys->constraint_set)) +#define extract_variable(sys) xbt_swag_remove(xbt_swag_getFirst(&(sys->variable_set)),&(sys->variable_set)) +#define extract_constraint(sys) xbt_swag_remove(xbt_swag_getFirst(&(sys->constraint_set)),&(sys->constraint_set)) #define insert_variable(sys,var) xbt_swag_insert(var,&(sys->variable_set)) #define insert_constraint(sys,cnst) xbt_swag_insert(cnst,&(sys->constraint_set)) -#define remove_variable(sys,var) do {xbt_swag_extract(var,&(sys->variable_set));\ - xbt_swag_extract(var,&(sys->saturated_variable_set));} while(0) -#define remove_constraint(sys,cnst) do {xbt_swag_extract(cnst,&(sys->constraint_set));\ - xbt_swag_extract(cnst,&(sys->saturated_constraint_set));} while(0) -#define remove_active_constraint(sys,cnst) xbt_swag_extract(cnst,&(sys->active_constraint_set)) +#define remove_variable(sys,var) do {xbt_swag_remove(var,&(sys->variable_set));\ + xbt_swag_remove(var,&(sys->saturated_variable_set));} while(0) +#define remove_constraint(sys,cnst) do {xbt_swag_remove(cnst,&(sys->constraint_set));\ + xbt_swag_remove(cnst,&(sys->saturated_constraint_set));} while(0) +#define remove_active_constraint(sys,cnst) xbt_swag_remove(cnst,&(sys->active_constraint_set)) #define make_constraint_active(sys,cnst) xbt_swag_insert(cnst,&(sys->active_constraint_set)) #define make_constraint_inactive(sys,cnst) remove_active_constraint(sys,cnst) diff --git a/src/surf/surf.c b/src/surf/surf.c index ecc3e9e770..6a7abaad79 100644 --- a/src/surf/surf.c +++ b/src/surf/surf.c @@ -37,7 +37,7 @@ void surf_action_change_state(surf_action_t action, e_surf_action_state_t state) { surf_action_state_t action_state = &(action->resource_type->states); - xbt_swag_extract(action, action->state_set); + xbt_swag_remove(action, action->state_set); if(state == SURF_ACTION_READY) action->state_set = action_state->ready_action_set; diff --git a/src/xbt/swag.c b/src/xbt/swag.c index 42e70fd10d..9cc8cecab9 100644 --- a/src/xbt/swag.c +++ b/src/xbt/swag.c @@ -53,7 +53,7 @@ void xbt_swag_insert(void *obj, xbt_swag_t swag) swag->tail = obj; } -void *xbt_swag_extract(void *obj, xbt_swag_t swag) +void *xbt_swag_remove(void *obj, xbt_swag_t swag) { size_t offset = swag->offset; @@ -85,6 +85,27 @@ void *xbt_swag_extract(void *obj, xbt_swag_t swag) return obj; } +void *xbt_swag_extract(xbt_swag_t swag) +{ + size_t offset = swag->offset; + void *obj = NULL; + + if ((!swag) || (!(swag->head))) + return NULL; + + obj = swag->head; + + if (swag->head == swag->tail) { /* special case */ + swag->head = swag->tail = NULL; + } else { + swag->head = NEXT(obj, offset); + PREV(swag->head, offset) = NULL; + NEXT(obj, offset) = NULL; + } + + return obj; +} + int xbt_swag_size(xbt_swag_t swag) { return (swag->count); diff --git a/testsuite/xbt/swag_usage.c b/testsuite/xbt/swag_usage.c index 258ae9c0d2..0bf9ada636 100644 --- a/testsuite/xbt/swag_usage.c +++ b/testsuite/xbt/swag_usage.c @@ -30,8 +30,8 @@ int main(void) xbt_swag_insert(obj2, setA); xbt_swag_insert(obj2, setB); - xbt_swag_extract(obj1, setB); - // xbt_swag_extract(obj2, setB); + xbt_swag_remove(obj1, setB); + // xbt_swag_remove(obj2, setB); xbt_swag_foreach(obj,setA) { printf("\t%s\n",obj->name); -- 2.20.1