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 /* Returns the remaining computing amount of a task.
63 double SG_task_get_remaining_amount(SG_task_t task) {
64 xbt_assert0(task, "Invalid parameter");
65 return task->remaining_amount;
68 /* Adds a dependency between two tasks.
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");
75 /* Removes a dependency between two tasks.
77 void SG_task_dependency_remove(SG_task_t src, SG_task_t dst) {
78 xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
82 /* Returns the state of a task: SG_SCHEDULED, SG_RUNNING, SG_DONE or SG_FAILED.
84 SG_task_state_t SG_task_get_state(SG_task_t task) {
85 xbt_assert0(task, "Invalid parameter");
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.
93 void SG_task_watch(SG_task_t task, SG_task_state_t state) {
94 xbt_assert0(task, "Invalid parameter");
98 /* Removes a watch point from a task.
100 void SG_task_unwatch(SG_task_t task, SG_task_state_t state) {
101 xbt_assert0(task, "Invalid parameter");
105 /* Unschedules a task.
106 Change state and rerun
108 void SG_task_unschedule(SG_task_t task) {
109 xbt_assert0(task, "Invalid parameter");
113 /* Destroys a task. The user data (if any) should have been destroyed first.
115 void SG_task_destroy(SG_task_t task) {
119 /* TODO: dependencies + watch */