1 #include "simdag/simdag.h"
2 #include "xbt/sysdep.h"
6 SG_task_t SG_task_create(const char *name, void *data, double amount) {
8 xbt_assert0(amount >= 0, "Invalid parameter"); /* or amount > 0 ? */
10 SG_task_t task = xbt_new0(s_SG_task_t, 1);
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 */
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");
33 /* Returns the data of a task.
35 void* SG_task_get_data(SG_task_t task) {
36 xbt_assert0(task, "Invalid parameter");
40 /* Sets the data of a task.
42 void SG_task_set_data(SG_task_t task, void *data) {
43 xbt_assert0(task, "Invalid parameter");
47 /* Returns the name of a task.
49 const char* SG_task_get_name(SG_task_t task) {
50 xbt_assert0(task, "Invalid parameter");
54 /* Returns the computing amount of a task.
56 double SG_task_get_amount(SG_task_t task) {
57 xbt_assert0(task, "Invalid parameter");
61 /*return task->amount;*/
64 /* Returns the remaining computing amount of a task.
66 double SG_task_get_remaining_amount(SG_task_t task) {
67 xbt_assert0(task, "Invalid parameter")
69 /* TODO (surf encapsulation) */;
73 /* Adds a dependency between two tasks.
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");
80 /* Removes a dependency between two tasks.
82 void SG_task_dependency_remove(SG_task_t src, SG_task_t dst) {
83 xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
87 /* Returns the state of a task: SG_SCHEDULED, SG_RUNNING, SG_DONE or SG_FAILED.
89 SG_task_state_t SG_task_get_state(SG_task_t task) {
90 xbt_assert0(task, "Invalid parameter");
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.
98 void SG_task_watch(SG_task_t task, SG_task_state_t state) {
99 xbt_assert0(task, "Invalid parameter");
103 /* Removes a watch point from a task.
105 void SG_task_unwatch(SG_task_t task, SG_task_state_t state) {
106 xbt_assert0(task, "Invalid parameter");
110 /* Unschedules a task.
111 Change state and rerun
113 void SG_task_unschedule(SG_task_t task) {
114 xbt_assert0(task, "Invalid parameter");
118 /* Destroys a task. The user data (if any) should have been destroyed first.
120 void SG_task_destroy(SG_task_t task) {
122 xbt_free(task->name);
124 /* TODO: dependencies + watch */