sd_global->task_mallocator=xbt_mallocator_new(65536, SD_task_new_f, SD_task_free_f, SD_task_recycle_f);
- sd_global->initial_task_set = xbt_dynar_new(sizeof(SD_task_t), nullptr);
- sd_global->executable_task_set = xbt_dynar_new(sizeof(SD_task_t), nullptr);
- sd_global->completed_task_set = xbt_dynar_new(sizeof(SD_task_t), nullptr);
+ sd_global->initial_task_set = new std::vector<SD_task_t>();
+ sd_global->executable_task_set = new std::vector<SD_task_t>();
+ sd_global->completed_task_set = new std::vector<SD_task_t>();
sd_global->return_set = xbt_dynar_new(sizeof(SD_task_t), nullptr);
surf_init(argc, argv);
xbt_dynar_reset(sd_global->return_set);
/* explore the runnable tasks */
- xbt_dynar_foreach(sd_global->executable_task_set , iter, task) {
+ for (unsigned int i =0; i < sd_global->executable_task_set->size(); i++) {
+ task = sd_global->executable_task_set->at(i);
XBT_VERB("Executing task '%s'", SD_task_get_name(task));
SD_task_run(task);
xbt_dynar_push(sd_global->return_set, &task);
}
}
- if (!sd_global->watch_point_reached && how_long<0 &&
- xbt_dynar_is_empty(sd_global->initial_task_set) == 0) {
+ if (!sd_global->watch_point_reached && how_long<0 && !sd_global->initial_task_set->empty()) {
XBT_WARN("Simulation is finished but %lu tasks are still not done",
- xbt_dynar_length(sd_global->initial_task_set));
+ sd_global->initial_task_set->size());
static const char* state_names[] =
{ "SD_NOT_SCHEDULED", "SD_SCHEDULABLE", "SD_SCHEDULED", "SD_RUNNABLE", "SD_RUNNING", "SD_DONE","SD_FAILED" };
- xbt_dynar_foreach(sd_global->initial_task_set, iter, task){
+ for (unsigned int i=0; i< sd_global->initial_task_set->size() ; i++){
+ task = sd_global->initial_task_set->at(i);
XBT_WARN("%s is in %s state", SD_task_get_name(task), state_names[SD_task_get_state(task)]);
}
}
#endif
xbt_mallocator_free(sd_global->task_mallocator);
- xbt_dynar_free_container(&(sd_global->initial_task_set));
- xbt_dynar_free_container(&(sd_global->executable_task_set));
- xbt_dynar_free_container(&(sd_global->completed_task_set));
+ delete sd_global->initial_task_set;
+ delete sd_global->executable_task_set;
+ delete sd_global->completed_task_set;
xbt_dynar_free_container(&(sd_global->return_set));
xbt_free(sd_global);
sd_global = nullptr;
/* 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);
/* 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_task_set->push_back(task);
task->marked = 0;
*/
void SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state)
{
- int idx;
+ std::vector<SD_task_t>::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->initial_task_set->push_back(task);
+ sd_global->completed_task_set->erase(std::remove(sd_global->completed_task_set->begin(),
+ sd_global->completed_task_set->end(), task),
+ sd_global->completed_task_set->end());
}
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->initial_task_set->push_back(task);
+ sd_global->executable_task_set->erase(std::remove(sd_global->executable_task_set->begin(),
+ sd_global->executable_task_set->end(), task),
+ sd_global->executable_task_set->end());
}
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_task_set->begin(), sd_global->initial_task_set->end(), task);
+ if (idx != sd_global->initial_task_set->end()) {
+ sd_global->executable_task_set->push_back(*idx);
+ sd_global->initial_task_set->erase(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_task_set->erase(std::remove(sd_global->executable_task_set->begin(),
+ sd_global->executable_task_set->end(), task),
+ sd_global->executable_task_set->end());
break;
case SD_DONE:
- xbt_dynar_push(sd_global->completed_task_set,&task);
+ sd_global->completed_task_set->push_back(task);
task->finish_time = task->surf_action->getFinishTime();
task->remains = 0;
#if HAVE_JEDULE
#endif
break;
case SD_FAILED:
- xbt_dynar_push(sd_global->completed_task_set,&task);
+ sd_global->completed_task_set->push_back(task);
break;
default:
xbt_die( "Invalid state");