Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
First SimDag draft. See http://simgrid.gforge.inria.fr/doc/faq.html#faq_SG_future
[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   return task->amount;
59 }
60
61 /* Returns the remaining computing amount of a task.
62  */
63 double SG_task_get_remaining_amount(SG_task_t task) {
64   xbt_assert0(task, "Invalid parameter");
65   return task->remaining_amount;
66 }
67
68 /* Adds a dependency between two tasks.
69  */
70 void SG_task_dependency_add(const char *name, void *data, SG_task_t src, SG_task_t dst) {
71   xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
72   /* TODO */
73 }
74
75 /* Removes a dependency between two tasks.
76  */
77 void SG_task_dependency_remove(SG_task_t src, SG_task_t dst) {
78   xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
79   /* TODO */
80 }
81
82 /* Returns the state of a task: SG_SCHEDULED, SG_RUNNING, SG_DONE or SG_FAILED.
83  */
84 SG_task_state_t SG_task_get_state(SG_task_t task) {
85   xbt_assert0(task, "Invalid parameter");
86   return task->state;
87 }
88
89 /* Adds a watch point to a task.
90    SG_simulate will stop as soon as the state of this task is the one given in argument.
91    Watch point is then automatically removed.
92  */
93 void  SG_task_watch(SG_task_t task, SG_task_state_t state) {
94   xbt_assert0(task, "Invalid parameter");
95   /* TODO */
96 }
97
98 /* Removes a watch point from a task.
99  */
100 void SG_task_unwatch(SG_task_t task, SG_task_state_t state) {
101   xbt_assert0(task, "Invalid parameter");
102   /* TODO */
103 }
104
105 /* Unschedules a task.
106    Change state and rerun
107  */
108 void SG_task_unschedule(SG_task_t task) {
109   xbt_assert0(task, "Invalid parameter");
110   /* TODO */
111 }
112
113 /* Destroys a task. The user data (if any) should have been destroyed first.
114  */
115 void SG_task_destroy(SG_task_t task) {
116   if (task->name)
117     free(task->name);
118
119   /* TODO: dependencies + watch */
120   free(task);
121 }