X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1ee20bd190694fd665b8a19b0620362758674aa3..da994ba1ded3e6d6fc8381444c0bab18a511a18d:/src/simdag/sd_task.cpp diff --git a/src/simdag/sd_task.cpp b/src/simdag/sd_task.cpp index d09c692213..40c8d702b4 100644 --- a/src/simdag/sd_task.cpp +++ b/src/simdag/sd_task.cpp @@ -22,7 +22,7 @@ static void __SD_task_dependency_destroy(void *dependency) /* 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 */ + /* we must destroy the dependencies carefully (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); @@ -63,7 +63,7 @@ void SD_task_recycle_f(void *t) /* Reset the content */ task->kind = SD_TASK_NOT_TYPED; task->state= SD_NOT_SCHEDULED; - xbt_dynar_push(sd_global->initial_task_set,&task); + sd_global->initial_tasks->insert(task); task->marked = 0; @@ -319,36 +319,33 @@ e_SD_task_state_t SD_task_get_state(SD_task_t task) */ void SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) { - int idx; + std::set::iterator idx; switch (new_state) { case SD_NOT_SCHEDULED: case SD_SCHEDULABLE: if (SD_task_get_state(task) == SD_FAILED){ - xbt_dynar_remove_at(sd_global->completed_task_set, - xbt_dynar_search(sd_global->completed_task_set, &task), nullptr); - xbt_dynar_push(sd_global->initial_task_set,&task); + sd_global->completed_tasks->erase(task); + sd_global->initial_tasks->insert(task); } break; case SD_SCHEDULED: if (SD_task_get_state(task) == SD_RUNNABLE){ - xbt_dynar_remove_at(sd_global->executable_task_set, - xbt_dynar_search(sd_global->executable_task_set, &task), nullptr); - xbt_dynar_push(sd_global->initial_task_set,&task); + sd_global->executable_tasks->erase(task); + sd_global->initial_tasks->insert(task); } break; case SD_RUNNABLE: - idx = xbt_dynar_search_or_negative(sd_global->initial_task_set, &task); - if (idx >= 0) { - xbt_dynar_remove_at(sd_global->initial_task_set, idx, nullptr); - xbt_dynar_push(sd_global->executable_task_set,&task); + idx = std::find(sd_global->initial_tasks->begin(), sd_global->initial_tasks->end(), task); + if (idx != sd_global->initial_tasks->end()) { + sd_global->initial_tasks->erase(idx); + sd_global->executable_tasks->insert(*idx); } break; case SD_RUNNING: - xbt_dynar_remove_at(sd_global->executable_task_set, - xbt_dynar_search(sd_global->executable_task_set, &task), nullptr); + sd_global->executable_tasks->erase(task); break; case SD_DONE: - xbt_dynar_push(sd_global->completed_task_set,&task); + sd_global->completed_tasks->insert(task); task->finish_time = task->surf_action->getFinishTime(); task->remains = 0; #if HAVE_JEDULE @@ -356,7 +353,7 @@ void SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) #endif break; case SD_FAILED: - xbt_dynar_push(sd_global->completed_task_set,&task); + sd_global->completed_tasks->insert(task); break; default: xbt_die( "Invalid state");