Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update SimDag task structure.
[simgrid.git] / src / simdag / sd_task.c
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);