From 0a7eb8c381f11279a5b6e1e97a726ff8d0746bcd Mon Sep 17 00:00:00 2001 From: thiery Date: Tue, 20 Jun 2006 14:49:27 +0000 Subject: [PATCH] Update SimDag task structure. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2408 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- include/simdag/datatypes.h | 15 ++++----------- src/simdag/private.h | 9 +++++++++ src/simdag/sd_task.c | 37 ++++++++++++++++++++++++++----------- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/include/simdag/datatypes.h b/include/simdag/datatypes.h index f7d3299308..894e21418f 100644 --- a/include/simdag/datatypes.h +++ b/include/simdag/datatypes.h @@ -7,11 +7,6 @@ typedef struct SD_link_data *SD_link_data_t; typedef struct SD_link { SD_link_data_t sd_data; /* SD internal data */ void *data; /* user data */ - - /*char *name;*/ - /*double capacity;*/ - /*double current_bandwidth; - double current_latency;*/ } s_SD_link_t, *SD_link_t; /* Workstation */ @@ -31,13 +26,11 @@ typedef enum { } SD_task_state_t; /* Task */ +typedef struct SD_task_data *SD_task_data_t; + typedef struct SD_task { - void *data; - char *name; - /*double amount; - double remaining_amount;*/ - SD_task_state_t state; - /* TODO: dependencies + watch */ + SD_task_data_t sd_data; /* SD internal data */ + void *data; /* user data */ } s_SD_task_t, *SD_task_t; #endif diff --git a/src/simdag/private.h b/src/simdag/private.h index ba0998ed5b..e115ebd713 100644 --- a/src/simdag/private.h +++ b/src/simdag/private.h @@ -27,6 +27,15 @@ typedef struct SD_workstation_data { void *surf_workstation; /* surf object */ } s_SD_workstation_data_t; +/* Task private data */ +typedef struct SD_task_data { + char *name; + SD_task_state_t state; + /*double amount; + double remaining_amount;*/ + /* TODO: dependencies + watch */ +} s_SD_task_data_t; + /* Private functions */ SD_link_t __SD_link_create(void *surf_link, void *data); diff --git a/src/simdag/sd_task.c b/src/simdag/sd_task.c index 2a8dac0f59..ea0d862093 100644 --- a/src/simdag/sd_task.c +++ b/src/simdag/sd_task.c @@ -1,19 +1,22 @@ +#include "private.h" #include "simdag/simdag.h" #include "xbt/sysdep.h" /* Creates a task. */ SD_task_t SD_task_create(const char *name, void *data, double amount) { + CHECK_INIT_DONE(); + xbt_assert0(name != NULL, "name is NULL !"); + xbt_assert0(amount >= 0, "amount must be positive"); /* or amount > 0 ? */ - xbt_assert0(amount >= 0, "Invalid parameter"); /* or amount > 0 ? */ + SD_task_data_t sd_data = xbt_new0(s_SD_task_data_t, 1); /* task private data */ + sd_data->name = xbt_strdup(name); + sd_data->state = SD_SCHEDULED; /* not sure */ SD_task_t task = xbt_new0(s_SD_task_t, 1); - - task->data = data; - task->name = xbt_strdup(name); - /*task->amount = amount; - task->remaining_amount = amount;*/ - task->state = SD_SCHEDULED; /* not sure... should we add a state SD_NOT_SCHEDULED? */ + task->sd_data = sd_data; /* private data */ + task->data = data; /* user data */ + /* TODO: dependencies + watch */ return task; @@ -24,6 +27,7 @@ SD_task_t SD_task_create(const char *name, void *data, double amount) { int SD_task_schedule(SD_task_t task, int workstation_nb, SD_workstation_t **workstation_list, double *computation_amount, double *communication_amount, double rate) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter"); /* TODO */ @@ -33,6 +37,7 @@ int SD_task_schedule(SD_task_t task, int workstation_nb, /* Returns the data of a task. */ void* SD_task_get_data(SD_task_t task) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter"); return task->data; } @@ -40,6 +45,7 @@ void* SD_task_get_data(SD_task_t task) { /* Sets the data of a task. */ void SD_task_set_data(SD_task_t task, void *data) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter"); task->data = data; } @@ -47,13 +53,15 @@ void SD_task_set_data(SD_task_t task, void *data) { /* Returns the name of a task. */ const char* SD_task_get_name(SD_task_t task) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter"); - return task->name; + return task->sd_data->name; } /* Returns the computing amount of a task. */ double SD_task_get_amount(SD_task_t task) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter"); /* TODO */ @@ -64,6 +72,7 @@ double SD_task_get_amount(SD_task_t task) { /* Returns the remaining computing amount of a task. */ double SD_task_get_remaining_amount(SD_task_t task) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter") /* TODO (surf encapsulation) */; @@ -73,6 +82,7 @@ double SD_task_get_remaining_amount(SD_task_t task) { /* Adds a dependency between two tasks. */ void SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task_t dst) { + CHECK_INIT_DONE(); xbt_assert0(src != NULL && dst != NULL, "Invalid parameter"); /* TODO */ } @@ -80,6 +90,7 @@ void SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task /* Removes a dependency between two tasks. */ void SD_task_dependency_remove(SD_task_t src, SD_task_t dst) { + CHECK_INIT_DONE(); xbt_assert0(src != NULL && dst != NULL, "Invalid parameter"); /* TODO */ } @@ -87,8 +98,9 @@ void SD_task_dependency_remove(SD_task_t src, SD_task_t dst) { /* Returns the state of a task: SD_SCHEDULED, SD_RUNNING, SD_DONE or SD_FAILED. */ SD_task_state_t SD_task_get_state(SD_task_t task) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter"); - return task->state; + return task->sd_data->state; } /* Adds a watch point to a task. @@ -96,6 +108,7 @@ SD_task_state_t SD_task_get_state(SD_task_t task) { Watch point is then automatically removed. */ void SD_task_watch(SD_task_t task, SD_task_state_t state) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter"); /* TODO */ } @@ -103,6 +116,7 @@ void SD_task_watch(SD_task_t task, SD_task_state_t state) { /* Removes a watch point from a task. */ void SD_task_unwatch(SD_task_t task, SD_task_state_t state) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter"); /* TODO */ } @@ -111,6 +125,7 @@ void SD_task_unwatch(SD_task_t task, SD_task_state_t state) { Change state and rerun */ void SD_task_unschedule(SD_task_t task) { + CHECK_INIT_DONE(); xbt_assert0(task, "Invalid parameter"); /* TODO */ } @@ -118,8 +133,8 @@ void SD_task_unschedule(SD_task_t task) { /* Destroys a task. The user data (if any) should have been destroyed first. */ void SD_task_destroy(SD_task_t task) { - if (task->name) - xbt_free(task->name); + CHECK_INIT_DONE(); + xbt_free(task->sd_data->name); /* TODO: dependencies + watch */ xbt_free(task); -- 2.20.1