Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update SimDag task structure.
[simgrid.git] / src / simdag / sd_task.c
1 #include "private.h"
2 #include "simdag/simdag.h"
3 #include "xbt/sysdep.h"
4
5 /* Creates a task.
6  */
7 SD_task_t SD_task_create(const char *name, void *data, double amount) {
8   CHECK_INIT_DONE();
9   xbt_assert0(name != NULL, "name is NULL !");
10   xbt_assert0(amount >= 0, "amount must be positive"); /* or amount > 0 ? */
11
12   SD_task_data_t sd_data = xbt_new0(s_SD_task_data_t, 1); /* task private data */
13   sd_data->name = xbt_strdup(name);
14   sd_data->state = SD_SCHEDULED; /* not sure */
15
16   SD_task_t task = xbt_new0(s_SD_task_t, 1);
17   task->sd_data = sd_data; /* private data */
18   task->data = data; /* user data */
19
20   /* TODO: dependencies + watch */
21
22   return task;
23 }
24
25 /* Schedules a task.
26  */
27 int SD_task_schedule(SD_task_t task, int workstation_nb,
28                      SD_workstation_t **workstation_list, double *computation_amount,
29                      double *communication_amount, double rate) {
30   CHECK_INIT_DONE();
31   xbt_assert0(task, "Invalid parameter");
32   /* TODO */
33
34   return 0;
35 }
36
37 /* Returns the data of a task.
38  */
39 void* SD_task_get_data(SD_task_t task) {
40   CHECK_INIT_DONE();
41   xbt_assert0(task, "Invalid parameter");
42   return task->data;
43 }
44
45 /* Sets the data of a task.
46  */
47 void SD_task_set_data(SD_task_t task, void *data) {
48   CHECK_INIT_DONE();
49   xbt_assert0(task, "Invalid parameter");
50   task->data = data;
51 }
52
53 /* Returns the name of a task.
54  */
55 const char* SD_task_get_name(SD_task_t task) {
56   CHECK_INIT_DONE();
57   xbt_assert0(task, "Invalid parameter");
58   return task->sd_data->name;
59 }
60
61 /* Returns the computing amount of a task.
62  */
63 double SD_task_get_amount(SD_task_t task) {
64   CHECK_INIT_DONE();
65   xbt_assert0(task, "Invalid parameter");
66
67   /* TODO */
68   return 0;
69   /*return task->amount;*/
70 }
71
72 /* Returns the remaining computing amount of a task.
73  */
74 double SD_task_get_remaining_amount(SD_task_t task) {
75   CHECK_INIT_DONE();
76   xbt_assert0(task, "Invalid parameter")
77
78   /* TODO (surf encapsulation) */;
79   return 0;
80 }
81
82 /* Adds a dependency between two tasks.
83  */
84 void SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task_t dst) {
85   CHECK_INIT_DONE();
86   xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
87   /* TODO */
88 }
89
90 /* Removes a dependency between two tasks.
91  */
92 void SD_task_dependency_remove(SD_task_t src, SD_task_t dst) {
93   CHECK_INIT_DONE();
94   xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
95   /* TODO */
96 }
97
98 /* Returns the state of a task: SD_SCHEDULED, SD_RUNNING, SD_DONE or SD_FAILED.
99  */
100 SD_task_state_t SD_task_get_state(SD_task_t task) {
101   CHECK_INIT_DONE();
102   xbt_assert0(task, "Invalid parameter");
103   return task->sd_data->state;
104 }
105
106 /* Adds a watch point to a task.
107    SD_simulate will stop as soon as the state of this task is the one given in argument.
108    Watch point is then automatically removed.
109  */
110 void  SD_task_watch(SD_task_t task, SD_task_state_t state) {
111   CHECK_INIT_DONE();
112   xbt_assert0(task, "Invalid parameter");
113   /* TODO */
114 }
115
116 /* Removes a watch point from a task.
117  */
118 void SD_task_unwatch(SD_task_t task, SD_task_state_t state) {
119   CHECK_INIT_DONE();
120   xbt_assert0(task, "Invalid parameter");
121   /* TODO */
122 }
123
124 /* Unschedules a task.
125    Change state and rerun
126  */
127 void SD_task_unschedule(SD_task_t task) {
128   CHECK_INIT_DONE();
129   xbt_assert0(task, "Invalid parameter");
130   /* TODO */
131 }
132
133 /* Destroys a task. The user data (if any) should have been destroyed first.
134  */
135 void SD_task_destroy(SD_task_t task) {
136   CHECK_INIT_DONE();
137   xbt_free(task->sd_data->name);
138
139   /* TODO: dependencies + watch */
140   xbt_free(task);
141 }