From: Frederic Suter Date: Wed, 6 Jul 2016 13:02:16 +0000 (+0200) Subject: attempt to replace internal dynar by std::vector X-Git-Tag: v3_14~786 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ff4e6203e4fb526267cc197ee3fa41e5d075608e?ds=sidebyside attempt to replace internal dynar by std::vector --- diff --git a/src/simdag/sd_daxloader.cpp b/src/simdag/sd_daxloader.cpp index 77f1532fdd..dc9eb44f66 100644 --- a/src/simdag/sd_daxloader.cpp +++ b/src/simdag/sd_daxloader.cpp @@ -340,7 +340,7 @@ void STag_dax__uses(void) SD_task_t file = static_cast(xbt_dict_get_or_null(files, A_dax__uses_file)); if (file == nullptr) { file = SD_task_create_comm_e2e(A_dax__uses_file, nullptr, size); - xbt_dynar_pop(sd_global->initial_task_set,nullptr); + sd_global->initial_task_set->pop_back(); xbt_dict_set(files, A_dax__uses_file, file, nullptr); } else { if (SD_task_get_amount(file) != size) { diff --git a/src/simdag/sd_global.cpp b/src/simdag/sd_global.cpp index fa37ca6670..0a88d5ceea 100644 --- a/src/simdag/sd_global.cpp +++ b/src/simdag/sd_global.cpp @@ -40,9 +40,9 @@ void SD_init(int *argc, char **argv) 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_global->executable_task_set = new std::vector(); + sd_global->completed_task_set = new std::vector(); sd_global->return_set = xbt_dynar_new(sizeof(SD_task_t), nullptr); surf_init(argc, argv); @@ -129,7 +129,8 @@ xbt_dynar_t SD_simulate(double how_long) { 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); @@ -228,13 +229,13 @@ xbt_dynar_t SD_simulate(double how_long) { } } - 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)]); } } @@ -268,9 +269,9 @@ void SD_exit() #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; diff --git a/src/simdag/sd_task.cpp b/src/simdag/sd_task.cpp index d09c692213..28df855ef5 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_task_set->push_back(task); task->marked = 0; @@ -319,36 +319,39 @@ 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::vector::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 @@ -356,7 +359,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_task_set->push_back(task); break; default: xbt_die( "Invalid state"); diff --git a/src/simdag/simdag_private.h b/src/simdag/simdag_private.h index 28e8664a88..af47f34bf7 100644 --- a/src/simdag/simdag_private.h +++ b/src/simdag/simdag_private.h @@ -6,7 +6,7 @@ #ifndef SIMDAG_PRIVATE_H #define SIMDAG_PRIVATE_H - +#include #include "xbt/dynar.h" #include "simgrid/simdag.h" #include "surf/surf.h" @@ -22,9 +22,9 @@ typedef struct SD_global { bool watch_point_reached; /* has a task just reached a watch point? */ - xbt_dynar_t initial_task_set; - xbt_dynar_t executable_task_set; - xbt_dynar_t completed_task_set; + std::vector *initial_task_set; + std::vector *executable_task_set; + std::vector *completed_task_set; xbt_dynar_t return_set;