Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update SimDag task structure.
authorthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 20 Jun 2006 14:49:27 +0000 (14:49 +0000)
committerthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 20 Jun 2006 14:49:27 +0000 (14:49 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2408 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/simdag/datatypes.h
src/simdag/private.h
src/simdag/sd_task.c

index f7d3299..894e214 100644 (file)
@@ -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
index ba0998e..e115ebd 100644 (file)
@@ -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);
index 2a8dac0..ea0d862 100644 (file)
@@ -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);