diff --git a/src/algo.c b/src/algo.c index b58f39fb6766ca096a7aae0b34c022ebaa6bb68e..82efb264b35f9fe6cf65bec81229bbc786933da1 100644 --- a/src/algo.c +++ b/src/algo.c @@ -161,7 +161,7 @@ int event_preceed(const void * a, const void * b) { { //typej = typek = arrivee et pj = pk et j < k if(get_event_processing_time(Akey) == get_event_processing_time(Bkey) - && get_event_task_id(Akey) < get_event_task_id(Bkey)){ + && strcmp(get_event_task_id(Akey), get_event_task_id(Bkey)) < 0){ return 1; } //typej = typek = arrivee et pj < pk @@ -266,7 +266,7 @@ int ready_task_preceed(const void * a, const void * b) { struct ready_task_key_t* tb = b; int res = get_ready_task_remaining_processing_time(b) - get_ready_task_remaining_processing_time(a); if (res == 0) - return get_ready_task_id(a) < get_ready_task_id(b); + return strcmp(get_ready_task_id(ta), get_ready_task_id(tb)) < 0; else return res > 0; } @@ -298,11 +298,10 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b while(get_tree_size(event_tree) != 0){ //Extraire de E l’ ́evenement e correspondant a l’instant t le plus petit - //Partie fausse, a faire - struct tree_node_t* event_node = get_node(event_tree); // ? - struct event_key_t* event_key = (struct event_key_t *) get_tree_node_key(event_node); - struct task_t* task = tree_remove(event_tree, event_key); //recuperer la data et la cast en tache - //fin partie fausse + //a verfieier ? + struct tree_node_t* event_node = tree_min(get_root(event_tree)); // recuperation du node a l instant t le plus petit + struct event_key_t* event_key = (struct event_key_t*) get_tree_node_key(event_node); + struct task_t* task = (struct task_t*) get_tree_node_data(event_node); //recuperer la data et la cast en tache // Si e concerne la libération d'une tache Tj if (get_event_type(event_key) == EVT_LIBERATION) { @@ -326,8 +325,9 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b if(get_tree_size(ready_tasks) != 0){ ////si la file d’attente Q n’est pas vide //Extraire de Q la tache Tk avec la duree la plus courte (regle SPT) - struct event_key_t* shortest_task_key = NULL; - struct task_t* shortest_task = NULL; + struct tree_node_t* shortest_node = tree_min(get_root(ready_tasks)); //pareil qu'en haut, a verifier + struct ready_task_key_t* shortest_task_key = (struct ready_task_key_t*) get_tree_node_key(shortest_node); + struct task_t* shortest_task = (struct task_t*) get_tree_node_data(shortest_node); //Affecter Tk a Mi en t dans S int machine = find_empty_machine(ordonnancement, get_event_time(event_key)); @@ -337,15 +337,19 @@ struct schedule_t * create_schedule(Instance I, int num_m, int preemption, int b struct event_key_t* end_key = new_event_key(EVT_FIN_EXEC, get_event_time(event_key) + get_event_processing_time(event_key), get_event_processing_time(event_key), get_task_id(task), machine); tree_insert(event_tree, end_key, shortest_task); - } + if(get_tree_size(ready_tasks) != 0){ + tree_remove(ready_tasks, shortest_task_key); + } + } + } - //delete_event_key(event_key); //pas sur de ça + tree_remove(event_tree, event_key); - } - //delete_tree(event_tree, ); - //delete_tree(ready_tasks, ); + //fin de la fonction, libreation mem des arbres + delete_tree(event_tree, delete_event_key, NULL); + delete_tree(ready_tasks, delete_ready_task_key, NULL); return ordonnancement; } diff --git a/src/instance.c b/src/instance.c index 24d71ca377eb3df9da2276728d8ae8271c1b8947..1d9126be5d01bd94e72bc0cb91ee4f5ee4307cda 100644 --- a/src/instance.c +++ b/src/instance.c @@ -53,7 +53,6 @@ void delete_task(void * task) { ********************************************************************/ Instance read_instance(const char * filename) { - // A FAIRE FILE *fp = fopen(filename, "r"); if(fp == NULL){ printf("Erreur lors de la lecture du fichier %s\n", filename); @@ -62,10 +61,9 @@ Instance read_instance(const char * filename) { Instance I = new_list(view_task, delete_task); - // fscanf("%s %d %d ", &id, &proctime, &reltime); char tempId[256] = {0}; unsigned long tempProc, tempRel; - while(fscanf(fp, "%255s %d %d ", &tempId, &tempProc, &tempRel) == 3) + while(fscanf(fp, "%255s %lu %lu ", &tempId, &tempProc, &tempRel) == 3) { char* str = malloc(strlen(tempId) + sizeof(char)); strcpy(str, tempId);