+/* Remove all dependencies associated with a task. This function is called when the task is destroyed. */
+static void __SD_task_remove_dependencies(SD_task_t task)
+{
+ /* we must destroy the dependencies carefuly (with SD_dependency_remove) because each one is stored twice */
+ SD_dependency_t dependency;
+ while (xbt_dynar_is_empty(task->tasks_before) == 0) {
+ xbt_dynar_get_cpy(task->tasks_before, 0, &dependency);
+ SD_task_dependency_remove(dependency->src, dependency->dst);
+ }
+
+ while (xbt_dynar_is_empty(task->tasks_after) == 0) {
+ xbt_dynar_get_cpy(task->tasks_after, 0, &dependency);
+ SD_task_dependency_remove(dependency->src, dependency->dst);
+ }
+}
+
+/* Destroys the data memorized by SD_task_schedule. Task state must be SD_SCHEDULED or SD_RUNNABLE. */
+static void __SD_task_destroy_scheduling_data(SD_task_t task)
+{
+ if (task->state != SD_SCHEDULED && task->state != SD_RUNNABLE)
+ THROWF(arg_error, 0, "Task '%s' must be SD_SCHEDULED or SD_RUNNABLE", SD_task_get_name(task));
+
+ xbt_free(task->flops_amount);
+ xbt_free(task->bytes_amount);
+ task->flops_amount = nullptr;
+ task->bytes_amount = nullptr;
+}
+
+void* SD_task_new_f()