From 3fc37c3e200f4abc0106904b78a62d4e5bde554c Mon Sep 17 00:00:00 2001 From: thiery Date: Fri, 4 Aug 2006 14:39:57 +0000 Subject: [PATCH] Improve the function SD_task_get_state git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2692 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/simdag/private.h | 4 ++-- src/simdag/sd_task.c | 17 +++-------------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/simdag/private.h b/src/simdag/private.h index 734f10fb01..1fa4e299c2 100644 --- a/src/simdag/private.h +++ b/src/simdag/private.h @@ -63,6 +63,7 @@ typedef struct SD_workstation { typedef struct SD_task { s_xbt_swag_hookup_t state_hookup; xbt_swag_t state_set; + e_SD_task_state_t state; void *data; /* user data */ char *name; double amount; @@ -112,8 +113,7 @@ void __SD_task_really_run(SD_task_t task); int __SD_task_try_to_run(SD_task_t task); void __SD_task_just_done(SD_task_t task); -/* Functions to test if the task is in a given state. - These functions are faster than using SD_task_get_state() */ +/* Functions to test if the task is in a given state. */ /* Returns whether the given task is scheduled or ready. */ static _XBT_INLINE int __SD_task_is_scheduled_or_ready(SD_task_t task) { diff --git a/src/simdag/sd_task.c b/src/simdag/sd_task.c index b4081c7a9e..a777596803 100644 --- a/src/simdag/sd_task.c +++ b/src/simdag/sd_task.c @@ -31,6 +31,7 @@ SD_task_t SD_task_create(const char *name, void *data, double amount) { task->name = NULL; task->state_set = sd_global->not_scheduled_task_set; + task->state = SD_NOT_SCHEDULED; xbt_swag_insert(task,task->state_set); task->amount = amount; @@ -97,20 +98,7 @@ void SD_task_set_data(SD_task_t task, void *data) { e_SD_task_state_t SD_task_get_state(SD_task_t task) { SD_CHECK_INIT_DONE(); xbt_assert0(task != NULL, "Invalid parameter"); - - if (task->state_set == sd_global->scheduled_task_set) - return SD_SCHEDULED; - if (task->state_set == sd_global->done_task_set) - return SD_DONE; - if (task->state_set == sd_global->running_task_set) - return SD_RUNNING; - if (task->state_set == sd_global->ready_task_set) - return SD_READY; - if (task->state_set == sd_global->in_fifo_task_set) - return SD_IN_FIFO; - if (task->state_set == sd_global->not_scheduled_task_set) - return SD_NOT_SCHEDULED; - return SD_FAILED; + return task->state; } /* Changes the state of a task. Updates the swags and the flag sd_global->watch_point_reached. @@ -148,6 +136,7 @@ void __SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) { xbt_assert0(0, "Invalid state"); } xbt_swag_insert(task, task->state_set); + task->state = new_state; if (task->watch_points & new_state) { INFO1("Watch point reached with task '%s'!", SD_task_get_name(task)); -- 2.20.1