Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
3a22af598f885903f717a8f3b0a4984c77b96117
[simgrid.git] / src / simdag / sd_task.c
1 #include "simdag/simdag.h"
2 #include "xbt/sysdep.h"
3
4 /* Creates a task.
5  */
6 SG_task_t SG_task_create(const char *name, void *data, double amount) {
7
8   xbt_assert0(amount >= 0, "Invalid parameter"); /* or amount > 0 ? */
9
10   SG_task_t task = xbt_new0(s_SG_task_t, 1);
11   
12   task->data = data;
13   task->name = xbt_strdup(name);
14   /*task->amount = amount;
15     task->remaining_amount = amount;*/
16   task->state = SG_SCHEDULED; /* not sure... should we add a state SG_NOT_SCHEDULED? */
17   /* TODO: dependencies + watch */
18
19   return task;
20 }
21
22 /* Schedules a task.
23  */
24 int SG_task_schedule(SG_task_t task, int workstation_nb,
25                      SG_workstation_t **workstation_list, double *computation_amount,
26                      double *communication_amount, double rate) {
27   xbt_assert0(task, "Invalid parameter");
28   /* TODO */
29
30   return 0;
31 }
32
33 /* Returns the data of a task.
34  */
35 void* SG_task_get_data(SG_task_t task) {
36   xbt_assert0(task, "Invalid parameter");
37   return task->data;
38 }
39
40 /* Sets the data of a task.
41  */
42 void SG_task_set_data(SG_task_t task, void *data) {
43   xbt_assert0(task, "Invalid parameter");
44   task->data = data;
45 }
46
47 /* Returns the name of a task.
48  */
49 const char* SG_task_get_name(SG_task_t task) {
50   xbt_assert0(task, "Invalid parameter");
51   return task->name;
52 }
53
54 /* Returns the computing amount of a task.
55  */
56 double SG_task_get_amount(SG_task_t task) {
57   xbt_assert0(task, "Invalid parameter");
58
59   /* TODO */
60   return 0;
61   /*return task->amount;*/
62 }
63
64 /* Returns the remaining computing amount of a task.
65  */
66 double SG_task_get_remaining_amount(SG_task_t task) {
67   xbt_assert0(task, "Invalid parameter")
68
69   /* TODO (surf encapsulation) */;
70   return 0;
71 }
72
73 /* Adds a dependency between two tasks.
74  */
75 void SG_task_dependency_add(const char *name, void *data, SG_task_t src, SG_task_t dst) {
76   xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
77   /* TODO */
78 }
79
80 /* Removes a dependency between two tasks.
81  */
82 void SG_task_dependency_remove(SG_task_t src, SG_task_t dst) {
83   xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
84   /* TODO */
85 }
86
87 /* Returns the state of a task: SG_SCHEDULED, SG_RUNNING, SG_DONE or SG_FAILED.
88  */
89 SG_task_state_t SG_task_get_state(SG_task_t task) {
90   xbt_assert0(task, "Invalid parameter");
91   return task->state;
92 }
93
94 /* Adds a watch point to a task.
95    SG_simulate will stop as soon as the state of this task is the one given in argument.
96    Watch point is then automatically removed.
97  */
98 void  SG_task_watch(SG_task_t task, SG_task_state_t state) {
99   xbt_assert0(task, "Invalid parameter");
100   /* TODO */
101 }
102
103 /* Removes a watch point from a task.
104  */
105 void SG_task_unwatch(SG_task_t task, SG_task_state_t state) {
106   xbt_assert0(task, "Invalid parameter");
107   /* TODO */
108 }
109
110 /* Unschedules a task.
111    Change state and rerun
112  */
113 void SG_task_unschedule(SG_task_t task) {
114   xbt_assert0(task, "Invalid parameter");
115   /* TODO */
116 }
117
118 /* Destroys a task. The user data (if any) should have been destroyed first.
119  */
120 void SG_task_destroy(SG_task_t task) {
121   if (task->name)
122     xbt_free(task->name);
123
124   /* TODO: dependencies + watch */
125   xbt_free(task);
126 }