diff --git a/include/db.h b/include/db.h deleted file mode 100644 index c4a0157965486762021e1b9c034fa14b4cbceff9..0000000000000000000000000000000000000000 --- a/include/db.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "list.h" - -/* file mode : text or binary */ -typedef enum file_mode { TEXT, BINARY } file_mode_t; - -/** - * @brief read a list from a text or binary file acording to the mode - * @param mode : TEXT or BIN - * @param data_read_fct : ptr to fct that reads datum from file fd ; fct's parameters : (fd, mode) - * @param del_fct : ptr to fct that deallocate datum's memory, ; fct's parameter (datum) - */ -list_t * read_list ( file_mode_t mode, void * (*read_fct) (), void (*del_fct) () ); - - -/** - * @brief write a list into a text or binary file acording to the mode - * @param mode : TEXT or BIN - * @param data_write_fct : ptr to fct that writes datum into file fd ; fct's parameters : (datum, fd, mode) - */ -void write_list ( list_t * L, file_mode_t mode, void (*write_fct) () ); \ No newline at end of file diff --git a/include/job.h b/include/job.h deleted file mode 100644 index a3bbc2b114cb92c6687a2d6d9ceccee5f6dd5374..0000000000000000000000000000000000000000 --- a/include/job.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include "list.h" -#include <stdbool.h> - -#define UNDEF -2 - -/** Des redondances possibles avec d'autres TAs ! */ -typedef struct { - char * title; // Nom de la tâche - double life; // Durée de la tâche - int input_degree; // Son degré de dépendance - int output_degree; // Les tâches qui en dépendent - int rank; // Rang de la tâche - int dyn_input_degree; // Facilité de prog - list_t * precedence; // Les tâches précédentes - list_t * posteriority; // Les tâches ultérieures - double au_plus_tot; // Date au plus tôt - double au_plus_tard; // Date au plus tard - double marge_totale; // Marge totale - double marge_libre; // Marge libre - bool critique; // Une tâche critique ? -} job_t; - -job_t * new_empty_job(); -job_t * new_job(char * title); -void free_job(job_t ** ptrJ); -void view_job ( job_t * J ); -char * get_job_title(job_t * J); -void set_job_title(job_t * J, char * title); -double get_job_life(job_t * J); -void set_job_life(job_t * J, double life); -int get_job_iDegree(job_t * J); -void set_job_iDegree(job_t * J, int iDegree); -void incr_job_iDegree(job_t * J); -void decr_job_iDegree(job_t * J); - -int get_job_oDegree(job_t * J); -void set_job_oDegree(job_t * J, int oDegree); -void incr_job_oDegree(job_t * J); -void decr_job_oDegree(job_t * J); -int get_job_rank(job_t * J); -void set_rank(job_t * J, int rank); -int titleJobCmp(job_t * J1, job_t * J2); -int iDegreeJobCmp(job_t * J1, job_t * J2); -int oDegreeJobCmp(job_t * J1, job_t * J2); -int rangJobCmp(job_t * J1, job_t * J2); - diff --git a/include/list.h b/include/list.h deleted file mode 100644 index f843d10bb956cb20e37e5af99f31ca144aece881..0000000000000000000000000000000000000000 --- a/include/list.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include <stdbool.h> -#include "list_elm.h" - -typedef struct list { - list_elm_t * head; - list_elm_t* tail; - int numelm; -} list_t; - -list_t * new_list(); -void del_list ( list_t * * L, void (*ptrf) () ); -bool empty_list ( list_t * L ); - -list_elm_t * get_head ( list_t * L ); -list_elm_t * get_tail ( list_t * L ); -void view_list ( list_t * L, void (*ptrf)() ); - -void cons ( list_t * L, void * data ); -void queue ( list_t * L, void * data ); -void ordered_insert ( list_t * L, void * data, int (*cmpFct)() ); - -int get_numelm(list_t * L); - -// void take_out(struct list_t * L, void * D); -void quick_sort(list_t * L, int (*cmpFct)()); -void find(list_t * L, void ** ptrKey, int (*cmpFct)(), void (*delFct)()); -void del_list(list_t ** ptrL, void (*ptrf) ()); -void clean(list_t * L); -bool is_empty(list_t * L); - - diff --git a/include/list_elm.h b/include/list_elm.h deleted file mode 100644 index 621dd3228dcc74a6159166ec3c348991527dc1b6..0000000000000000000000000000000000000000 --- a/include/list_elm.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -typedef struct list_elm { - void * data; - struct list_elm * suc, * pred; -} list_elm_t; - -list_elm_t * new_list_elm ( void * data ); -/** - * @brief delete the list element E and optionnaly its datum - * @param ptrf : a ptr to fct that deallocates datum's memory ; - * if ptrf is NULL, datum is not freed - */ -void del_list_elm( list_elm_t * * E, void (*ptrf)() ); - -list_elm_t * get_suc ( list_elm_t * E ); -list_elm_t * get_pred ( list_elm_t * E ); -void * get_data ( list_elm_t * E ); - -void set_suc ( list_elm_t * E, list_elm_t * S ); -void set_pred ( list_elm_t * E, list_elm_t * P ); -void set_data ( list_elm_t * E, void * data ); - -void view_list_elm ( list_elm_t * E, void (*ptrf)() ); diff --git a/include/outils.h b/include/outils.h deleted file mode 100644 index 79f54e3f28be988e287dc41050e54cee63b19905..0000000000000000000000000000000000000000 --- a/include/outils.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#define EPSILON 0.00000001// ε = 10^{-8} - -/** Integer comparaison */ -int int_cmp ( int * a, int * b ); - -/** Double comparaison */ -int double_cmp ( double * a, double * b ); \ No newline at end of file diff --git a/include/rank.h b/include/rank.h deleted file mode 100644 index 9ba383b24053103aa527f09ea8211159fc5249cb..0000000000000000000000000000000000000000 --- a/include/rank.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include "list.h" - - -void ranking(list_t * G); -void prune(list_t * G); - -void marges(list_t * G); - diff --git a/makefile b/makefile deleted file mode 100644 index 8d48e778bd0e09ecba2dbe7ccc818215b82d12eb..0000000000000000000000000000000000000000 --- a/makefile +++ /dev/null @@ -1,38 +0,0 @@ -BDIR = bin -IDIR = include -ODIR = obj -SDIR = src - -CC = gcc -# Le déboggage en toutes circonstances grâce à :: -D _DEBUG_ -# que l'on peutarêter à tout moment grâce à :: -U _DEBUG_ -CFLAGS = -Wall -I$(IDIR) -g -c -LFLAGS = -lm - -PROG = $(BDIR)/mpm - -_DEPS = job.h list.h list_elm.h outils.h #rank.h -DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) - -_OBJS = db.o io.o job.o list.o list_elm.o main.o outils.o #rank.o -OBJS = $(patsubst %,$(ODIR)/%,$(_OBJS)) - -.PHONY : run all dirs clean delete - -run : all - ./$(PROG) - -all : dirs $(OBJS) - $(CC) -o $(PROG) $(OBJS) $(LFLAGS) - -dirs : - mkdir -p $(ODIR) $(BDIR) - -$(ODIR)/%.o : $(SDIR)/%.c $(DEPS) - $(CC) $(CFLAGS) -o $@ $< - -clean : - rm -rf $(ODIR) - -delete : clean - rm -rf $(BDIR) \ No newline at end of file diff --git a/obj/db.o b/obj/db.o deleted file mode 100644 index 02a8690f0be0218bc1f329379cdd0383219ac9fd..0000000000000000000000000000000000000000 Binary files a/obj/db.o and /dev/null differ diff --git a/obj/io.o b/obj/io.o deleted file mode 100644 index 10bee52ae486bc83610bea63e627baa252d403ca..0000000000000000000000000000000000000000 Binary files a/obj/io.o and /dev/null differ diff --git a/readme.md b/readme.md deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/db.c b/src/db.c deleted file mode 100644 index b26b108f88d3de9266f593a5df1baf651a47eb7d..0000000000000000000000000000000000000000 --- a/src/db.c +++ /dev/null @@ -1,74 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <assert.h> -#include "db.h" -#include "list.h" -#include "list_elm.h" - -list_t * read_list( file_mode_t mode, void * (*read_fct) (), void (*del_fct) () ) { - FILE * fd; - char fname[20]; - list_t * L = new_list(); - - if (mode == TEXT) {// Open file in TEXT mode - printf( "\t\tRead list from text file (.txt)\n\tfile name :" ); - scanf( "%s", fname ); - fd = fopen( fname, "rt" ); - } - else {// open file in BIN mode - printf( "\t\tRead list from binary file (.bin)\n\tfile name :" ); - scanf( "%s", fname ); - fd = fopen( fname, "rb" ); - } - //todo - void * datum; - while ((datum = read_fct(fd, mode)) != NULL) { - queue(L, datum); - } - - - list_elm_t * E = get_tail(L); - if (E != NULL && empty_list(E->data)) { - list_elm_t * T = get_pred(E); - if (T != NULL) { - set_suc(T, NULL); - L->tail = T; - } else { - L->head = L->tail = NULL; - } - del_list_elm(&E, del_fct); - } - - /** TODO parcourir le fichier pour y collecter les formulaires et les ranger dans la L - ATTENTION : - il est **possible** que vous créiez un élément de trop (un formulaire vide) en fin de liste. - Il faut alors penser à le supprimer grâce au code suivant : - E = get_tail (L); - struct elmlist * T = getPred(E); - set_suc(T, NULL); - L->tail = T; - del_elmlist(E, ptr_del); - */ - - - fclose(fd); - return L; - } -void write_list( list_t * L, file_mode_t mode, void (*write_fct) () ) { - FILE * fd; - char fname[20]; - if (mode == TEXT) { - printf( "\t\tWrite list to text file (.txt)\n\tfile name :"), scanf( "%s", fname ); - fd = fopen( fname, "wt" ); - } else { - printf("\t\tWrite list to binary file (.bin)\n\tfile name :"), scanf( "%s", fname ); - fd = fopen(fname, "wb" ); - } - - for (list_elm_t * elm = get_head(L); elm != NULL; elm = elm->suc){ - write_fct(elm->data, mode, fd); - } - /// @todo Parcourir L et écrire les formulaires grâce à data_write_fct - fclose(fd); -} - diff --git a/src/io.c b/src/io.c deleted file mode 100644 index aafeda62a9a41ca88b3ba9f9d4967632e3076d27..0000000000000000000000000000000000000000 --- a/src/io.c +++ /dev/null @@ -1,141 +0,0 @@ -#include "list.h" -#include "list_elm.h" -#include "job.h" -#include "list.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <assert.h> - -list_t * read_graph ( char * filename ) { - FILE * fd = fopen ( filename, "rt" ); - list_t * G = new_list ( ); - assert ( fd && G ); - char job_name [ BUFSIZ ]; - - while ( !feof ( fd ) ) { - - fscanf ( fd, " %s", job_name); - if ( !strcmp (job_name, "NIL" ) ) continue; - - job_t * J = new_job ( job_name ); - - /** @note - À l'appel J pointe sur le job que l'on vient de créer. - - FIND retrouve le job J dans la liste G des jobs grâce à la fonction titleJobCmp. - Si ce job n'est pas dans la liste G alors - le job pointé par J est enregistré dans G - Si ce job est déjà dans G alors - le job pointé par J est supprimé grâce à free_job - puis le pointeur de J est réassigné sur le job trouvé dans G - */ - find ( G, ( void ** ) &J, &titleJobCmp, &free_job ); - - fscanf ( fd, "%lf", &(J->life) ); - - /** @note - Enregistrement des préséances - */ - job_t * predJ; - fscanf( fd, " %s", job_name ); - while ( strcmp ( job_name, "NIL" ) ) { - predJ = new_job ( job_name ); - //SOUVIENS SI &TITTLEJOBCMP = &SETJOBTITLE - find ( G, (void **) &predJ, &titleJobCmp, &free_job ); - - ordered_insert ( predJ->posteriority, J, &titleJobCmp ); - incr_job_oDegree ( predJ ); - - ordered_insert ( J->precedence, predJ, &titleJobCmp ); - incr_job_iDegree ( J ); - - fscanf ( fd, " %s", job_name ); - } - - /** @note valeurs par défaut des autres champs */ - J->dyn_input_degree = J->input_degree; - J->rank = UNDEF; - J->au_plus_tard = UNDEF; - J->au_plus_tot = UNDEF; - J->marge_totale = UNDEF; - J->critique = false; - } - - view_list(G,&view_job); - return G; -} - -static void partition(list_t * L, elmlist_t * pivot, list_t * val_inf, list_t * val_sup, int (*cmpFct)(void*, void*)) { - for (elmlist_t * cur = L->head; cur != NULL; cur = cur->suc) { - if (cmpFct(get_data(cur), get_data(pivot)) < 0) - queue(val_inf, get_data(cur)); - else - queue(val_sup, get_data(cur)); - } -} - -void quick_sort(list_t * L, int (*cmpFct)(void*, void*)) { - assert(L && cmpFct); - - if (L->numelm > 1) { - //CONFIRMER LE STRUCT - struct list_elm_t * pivot = get_head(L); - L->head = get_suc(pivot); - pivot->pred = NULL; - pivot->suc = NULL; - - - /** @note - * La listes des données inférieures à pivot - * La listes des données supérieures à pivot - */ - list_t * val_inf_pivot = new_list(); - list_t * val_sup_pivot = new_list(); - - /** @note Déplacement des données de L dans val_inf_pivot et val_sup_pivot */ - partition(L,pivot,val_inf_pivot,val_sup_pivot,cmpFct); - - /** @note On supprimer les éléments de L sans supprimer ni L ni les jobs */ - // elmlist_t * S; - // for(elmlist_t * E = L->head; E; E = S){ - // S = E->suc; - // free(E); - // } - - /** @note - * Si la partie inf est vide alors L commence par le pivot - * Sinon on tri grâce à cmpFct la partie inf puis on ajoute en queue le pivot - */ - - - if (is_empty(val_inf_pivot)) { - L->head = pivot; - L->tail = pivot; - L->numelm = 1; - } else { - quick_sort(val_inf_pivot, cmpFct); - L->head = val_inf_pivot->head; - L->tail = val_inf_pivot->tail; - L->numelm = val_inf_pivot->numelm; - pivot->pred = L->tail; - L->tail->suc = pivot; - L->tail = pivot; - L->numelm += 1; - } - /** @note - * Si la partie sup n'est pas vide alors - * On la trie puis on la concatène à la partie inf - */ - if (!is_empty(val_sup_pivot)) { - quick_sort(val_sup_pivot, cmpFct); - val_sup_pivot->head->pred = pivot; - set_suc(pivot, val_sup_pivot->head); - L->tail = val_sup_pivot->tail; - L->numelm += val_sup_pivot->numelm; - } - free(val_inf_pivot); - free(val_sup_pivot); - } -} \ No newline at end of file diff --git a/src/job.c b/src/job.c deleted file mode 100644 index dc5002cc6077faf394d4d51de9d51c15c954ea54..0000000000000000000000000000000000000000 --- a/src/job.c +++ /dev/null @@ -1,55 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> -#include <assert.h> -#include <string.h> -#include "job.h" -#include "list.h" - -job_t * new_empty_job ( ) { - job_t * J = calloc ( 1, sizeof (job_t ) ); - assert( J ); - J->precedence = new_list ( ); - J->posteriority = new_list ( ); - J->rank = UNDEF; - J->au_plus_tard = UNDEF; - J->au_plus_tot = UNDEF; - J->marge_totale = UNDEF; - J->critique = false; - return J; -} -job_t * new_job ( char * title ) { - job_t * J = new_empty_job ( ); - J->title = strdup ( title ); - return J; -} -void free_job(job_t ** ptrJ ) { - assert ( ptrJ && *ptrJ ); - if( (*ptrJ)->title ) free ( (*ptrJ)->title ); - free ( *ptrJ ); - *ptrJ = NULL; -} - -void view_job ( job_t * J ) { - printf ( "JOB %s\n\tpreceeded by [", get_job_tilte ( J ) ); - for(elmlist_t * E = get_head ( J->precedence ); E; E = get_suc ( E ) ) { - printf ( " %s", get_job_tilte ( get_data ( E ) ) ); - } - printf ( " ]\n" ); - // if ( !get_numelm ( J->posteriority ) ) printf ( "\t" ); - printf ( "\tfollowed by [" ); - for(elmlist_t * E = get_head(J->posteriority); E; E = get_suc(E)){ - printf(" %s", get_job_tilte(get_data(E))); - } - printf ( " ]\n" ); - printf ( "\tiDeg=%d\toDeg=%d\tlife=%2.2lf", J->input_degree, J->output_degree, J->life ); - printf ( "\trank=" ); - if ( J->rank == UNDEF ) printf ( "U" ); else printf ( "%d", J->rank ); - printf ( "\tearly=" ); - if(J->au_plus_tot == UNDEF ) printf("U"); else printf ( "%2.2lf",J->au_plus_tot ); - printf ( "\tlate=" ); - if(J->au_plus_tard == UNDEF ) printf("U"); else printf ( "%2.2lf",J->au_plus_tard ); - printf ( "\ttotale= " ); - if ( J->marge_totale == UNDEF ) printf("U"); else printf ( "%2.2lf", J->marge_totale ); - printf ( "\tcritical= " ); - if ( J->critique ) printf("Y\n"); else printf ( "N\n" ); -} diff --git a/src/job_2.c b/src/job_2.c deleted file mode 100644 index 76c8897c629fe8bdff813c648b4eab6e91f69d3c..0000000000000000000000000000000000000000 --- a/src/job_2.c +++ /dev/null @@ -1,111 +0,0 @@ -#include "job.h" -#include "list.h" -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <assert.h> - -job_t * new_empty_job(){ - job_t * J = calloc ( 1, sizeof (job_t ) ); - assert( J ); - J->precedence = new_list ( ); - J->posteriority = new_list ( ); - J->rank = UNDEF; - J->au_plus_tard = UNDEF; - J->au_plus_tot = UNDEF; - J->marge_totale = UNDEF; - J->critique = false; - return J; -} - -job_t * new_job(char * title){ - job_t * J = new_empty_job ( ); - J->title = strdup ( title ); - return J; -} - -void free_job(job_t ** ptrJ){ - assert ( ptrJ && *ptrJ ); - if( (*ptrJ)->title ) free ( (*ptrJ)->title ); - free ( *ptrJ ); - *ptrJ = NULL; -} - -void view_job ( job_t * J ) { - printf ( "JOB %s\n\tpreceeded by [", get_job_tilte ( J ) ); - for(elmlist_t * E = get_head ( J->precedence ); E; E = get_suc ( E ) ) { - printf ( " %s", get_job_tilte ( get_data ( E ) ) ); - } - printf ( " ]\n" ); - // if ( !get_numelm ( J->posteriority ) ) printf ( "\t" ); - printf ( "\tfollowed by [" ); - for(elmlist_t * E = get_head(J->posteriority); E; E = get_suc(E)){ - printf(" %s", get_job_tilte(get_data(E))); - } - printf ( " ]\n" ); - printf ( "\tiDeg=%d\toDeg=%d\tlife=%2.2lf", J->input_degree, J->output_degree, J->life ); - printf ( "\trank=" ); - if ( J->rank == UNDEF ) printf ( "U" ); else printf ( "%d", J->rank ); - printf ( "\tearly=" ); - if(J->au_plus_tot == UNDEF ) printf("U"); else printf ( "%2.2lf",J->au_plus_tot ); - printf ( "\tlate=" ); - if(J->au_plus_tard == UNDEF ) printf("U"); else printf ( "%2.2lf",J->au_plus_tard ); - printf ( "\ttotale= " ); - if ( J->marge_totale == UNDEF ) printf("U"); else printf ( "%2.2lf", J->marge_totale ); - printf ( "\tcritical= " ); - if ( J->critique ) printf("Y\n"); else printf ( "N\n" ); -} - -char * get_job_title(job_t * J) { - assert(J); - return J->title; -} - -void titleJobCmp(job_t * J, char * title){ - - - -} - -void set_job_title(job_t * J, char * title) { - assert(J && title); - if(J->title) - free(J->title); - J->title = strdup(title); -} - - -double get_job_life(job_t * J) { - assert(J); - return J->life; -} - - -void set_job_life(job_t * J, double life) { - assert(J); - J->life = life; -} - - -int get_job_iDegree(job_t * J) { - assert(J); - return J->input_degree; -} - - -void set_job_iDegree(job_t * J, int iDegree) { - assert(J); - J->input_degree = iDegree; -} - - -void incr_job_iDegree(job_t * J) { - assert(J); - J->input_degree++; -} - - -void decr_job_iDegree(job_t * J) { - assert(J); - J->input_degree--; -} \ No newline at end of file diff --git a/src/job_3.c b/src/job_3.c deleted file mode 100644 index 6ac6944036af9438a4d02686609d6536ca115c44..0000000000000000000000000000000000000000 --- a/src/job_3.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "job.h" -#include <assert.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -//TOUS EST CHANGee -int get_job_oDegree(job_t * J) { - assert(J); - return J->output_degree; -} - -void set_job_oDegree(job_t * J, int oDegree) { - assert(J); - J->output_degree = oDegree; -} - -void incr_job_oDegree(job_t * J) { - assert(J); - J->output_degree++; -} - -void decr_job_oDegree(job_t * J) { - assert(J); - J->output_degree--; -} - -int get_job_rank(job_t * J) { - assert(J); - return J->rank; -} - -void set_rank(job_t * J, int rank) { - assert(J); - J->rank = rank; -} - -int titleJobCmp(job_t * J1, job_t * J2) { - assert(J1 && J2); - return strcmp(J1->title, J2->title); -} - -int iDegreeJobCmp(job_t * J1, job_t * J2) { - assert(J1 && J2); - return J1->input_degree - J2->input_degree; -} - -int oDegreeJobCmp(job_t * J1, job_t * J2) { - assert(J1 && J2); - return J1->output_degree - J2->output_degree; -} - -int rangJobCmp(job_t * J1, job_t * J2) { - assert(J1 && J2); - return J1->rank - J2->rank; -} diff --git a/src/list.c b/src/list.c deleted file mode 100644 index 7032f0b3d1614b7d525cfd25a625e16e40eeca66..0000000000000000000000000000000000000000 --- a/src/list.c +++ /dev/null @@ -1,103 +0,0 @@ -#include <stdlib.h> -#include <assert.h> -#include "list.h" -#include "list_elm.h" - -list_t * new_list() { - list_t * L = calloc(1, sizeof(list_t)); - assert(L); - L->head = NULL; - L->tail = NULL; - L->numelm = 0; - return L; -} - -void del_list(list_t ** L, void (*ptr_del)(void *)) { - assert(L && *L); - list_t * list = *L; - list_elm_t * E = list->head; - while (E) { - list_elm_t * temp = E; - E = E->suc; - if(ptr_del) { - ptr_del(temp->data); - } - free(temp); - } - free(*L); - *L = NULL; -} - -bool empty_list(list_t * L) { - assert(L); - return L->numelm == 0; -} - -list_elm_t * get_head(list_t * L) { - assert(L); - return L->head; -} - -list_elm_t * get_tail(list_t * L) { - assert(L); - return L->tail; -} - -void view_list(list_t * L, void (*ptr_view)(void *)) { - assert(L && ptr_view); - for (list_elm_t * E = L->head; E != NULL; E = get_suc(E)) { - ptr_view(E->data); - } -} - -void cons(list_t * L, void * data) { - list_elm_t * E = new_list_elm(data); - E->suc = L->head; - if (L->head != NULL) { - L->head->pred = E; - } - L->head = E; - if (L->tail == NULL) { - L->tail = E; - } - L->numelm++; -} - -void queue(list_t * L, void * data) { - list_elm_t * E = new_list_elm(data); - if(empty_list(L)) { - L->head = E; - L->tail = E; - } else { - L->tail->suc = E; - E->pred = L->tail; - L->tail = E; - } - L->numelm++; -} - -void insert_after(list_t * L, void * data, list_elm_t * elm) { - if(elm == NULL) return; - list_elm_t * E = new_list_elm(data); - E->suc = elm->suc; - E->pred = elm; - if(elm->suc != NULL) { - elm->suc->pred = E; - } else { - L->tail = E; - } - elm->suc = E; - L->numelm++; -} - -void ordered_insert(list_t * L, void * data, int (*cmpFct)(void*, void*)) { - if(empty_list(L) || cmpFct(L->head->data, data) > 0) { - cons(L, data); - } else { - list_elm_t * current = L->head; - while(get_suc(current) != NULL && cmpFct(get_suc(current)->data, data) <= 0) { - current = get_suc(current); - } - insert_after(L, data, current); - } -} diff --git a/src/list_1 (1).c b/src/list_1 (1).c deleted file mode 100644 index ef9df30293f795e48da03e19b70ddab29d65bed9..0000000000000000000000000000000000000000 --- a/src/list_1 (1).c +++ /dev/null @@ -1,74 +0,0 @@ -#include "list_1 (1).h" -#include "list" -#include <stdlib.h> -#include <stdbool.h> -#include <stdio.h> -#include <assert.h> - -typedef struct{ - elmlist_t * head; - elmlist_t * tail; - int numelm; - } list_t ; - // Create an empty list - list_t * new_list(){ - list_t * t = calloc(1, sizeof(list_t)); - assert(t); - return t; - } - // Delete list, its elements and possibly the data - //DOIT CONFIRMER LE STRUCT - void del_list(list_t ** ptrL, void (*ptrf) ()){ - assert(ptrL && *ptrL); - list_t * L = *ptrL; - if(ptrf){ - for(elmlist_t * E = L->head; E; ){ - elmlist_t * T = E; - E = E->suc; - (*ptrf)(T->data); - free(T); - } - } - } else { - for(elmlist_t * E = L->head; E ; ){ - elmlist_t * T = E; - E = E->suc; - free(T); - } - free(*ptrL); - (*ptrL) = NULL; -} - // Clean list; delete its elments but keep data and the list - void clean(list_t * L){ - assert(L); - elmlist_t *curr = L->head; - while (curr != NULL) { - elmlist_t *temp = curr; - curr = curr->suc; - free(temp); - } - L->head = NULL; - L->tail = NULL; - L->numelm = 0; -} - // Is list L empty ? - bool is_empty(list_t * L){ - assert(L); - if (L->numelm == 0) return true; - return false; - } - - elmlist_t * get_head(list_t * L){ - assert(L); - L = L->head; - return L; - } - - elmlist_t * get_tail(list_t * L){ - assert(L); - L = L->tail; - return L; - } - - - \ No newline at end of file diff --git a/src/list_2.c b/src/list_2.c deleted file mode 100644 index ed867d3c8d7217ea6321afb1404c48dbfb069be8..0000000000000000000000000000000000000000 --- a/src/list_2.c +++ /dev/null @@ -1,226 +0,0 @@ -#include "list_1 (1).h" -#include "list.h" -#include <stdlib.h> -#include <stdio.h> -#include <assert.h> - -// Gimme the number of elements of L -int get_numelm(struct list_t * L){ - assert(L); - return L->numelm; -} -// Take out the data D of the list L if it is present -void take_out(struct list_t * L, void * D){ - assert(L); - elmlist_t * current = L->head; - while (current != NULL) { - if (get_data(current) == D) { - elmlist_t * p = get_pred(current); - elmlist_t * s = get_suc(current); - // Update predecessor’s successor - if (p) set_suc(p, s); - else L->head = s; // current was head - // Update successor’s predecessor - if (s) set_pred(s, p); - else L->tail = p; // current was tail - free(current); - L->numelm--; - return; - } - current = get_suc(current); - } -} - -// Add a element holding data to the head of L -void cons(struct list_t * L, void * data){ - elmlist_t * E = calloc(1, sizeof(elmlist_t)); - assert(L && E); - set_data(E, data); - set_suc(E, L->head); - set_head(L, E); - if(is_empty(L)) L->tail = E; - L->numelm += 1; - } - - - - -// Add a element holding data to the tail of L -void queue(struct list_t * L, void * data){ - assert(L); - elmlist_t * E = calloc(1, sizeof(elmlist_t)); - assert(E); - set_data(E, data); - E->suc = NULL; - if (is_empty(L)) { - E->pred = NULL; - L->head = E; - L->tail = E; - } else { - E->pred = L->tail; - L->tail->suc = E; - L->tail = E; - } - L->numelm++; - } -// Insert in L a element holding data wrt order given by cmp_ptrf -void ordered_insert(struct list_t * L, void * data, int (*cmp_ptrf)()){ - assert(L && cmp_ptrf); - elmlist_t * E = calloc(1, sizeof(elmlist_t)); - assert(E); - set_data(E, data); - // if list is empty, simply add the element - if (is_empty(L)) { - E->pred = E->suc = NULL; - L->head = L->tail = E; - L->numelm++; - return; - } -} - -// Elements qui sont moins = val_inf et le reste val_sup. -static void partition(list_t * L, elmlist_t * pivot, list_t * val_inf, list_t * val_sup, int (*cmpFct)(void*, void*)) { - for (elmlist_t * cur = L->head; cur != NULL; cur = cur->suc) { - if (cmpFct(get_data(cur), get_data(pivot)) < 0) - queue(val_inf, get_data(cur)); - else - queue(val_sup, get_data(cur)); - } -} - -void quick_sort(list_t * L, int (*cmpFct)(void*, void*)) { - assert(L && cmpFct); - - if (L->numelm > 1) { - - elmlist_t * pivot = get_head(L); - L->head = get_suc(pivot); - pivot->pred = NULL; - pivot->suc = NULL; - - - /** @note - * La listes des données inférieures à pivot - * La listes des données supérieures à pivot - */ - list_t * val_inf_pivot = new_list(); - list_t * val_sup_pivot = new_list(); - - /** @note Déplacement des données de L dans val_inf_pivot et val_sup_pivot */ - partition(L,pivot,val_inf_pivot,val_sup_pivot,cmpFct); - - /** @note On supprimer les éléments de L sans supprimer ni L ni les jobs */ - // elmlist_t * S; - // for(elmlist_t * E = L->head; E; E = S){ - // S = E->suc; - // free(E); - // } - - /** @note - * Si la partie inf est vide alors L commence par le pivot - * Sinon on tri grâce à cmpFct la partie inf puis on ajoute en queue le pivot - */ - - - if (is_empty(val_inf_pivot)) { - L->head = pivot; - L->tail = pivot; - L->numelm = 1; - } else { - quick_sort(val_inf_pivot, cmpFct); - L->head = val_inf_pivot->head; - L->tail = val_inf_pivot->tail; - L->numelm = val_inf_pivot->numelm; - pivot->pred = L->tail; - L->tail->suc = pivot; - L->tail = pivot; - L->numelm += 1; - } - /** @note - * Si la partie sup n'est pas vide alors - * On la trie puis on la concatène à la partie inf - */ - if (!is_empty(val_sup_pivot)) { - quick_sort(val_sup_pivot, cmpFct); - val_sup_pivot->head->pred = pivot; - pivot->suc = val_sup_pivot->head; - L->tail = val_sup_pivot->tail; - L->numelm += val_sup_pivot->numelm; - } - free(val_inf_pivot); - free(val_sup_pivot); - } -} - -// void quick_sort(list_t * L, int (*cmpFct)()){ - -// if (L == NULL || L->numelm < 2) -// return; - - -// elmlist_t * pivotNode = L->head; -// void * pivotData = pivotNode->data; - - -// list_t * less = new_list(); -// list_t * greater = new_list(); - - -// for (elmlist_t * cur = L->head; cur != NULL; cur = cur->suc) { - -// if (cur == pivotNode) -// continue; - -// if (cmpFct(cur->data, pivotData) < 0) -// queue(less, cur->data); -// else -// queue(greater, cur->data); -// } - - -// clean(L); - - -// quick_sort(less, cmpFct); -// quick_sort(greater, cmpFct); - -// for (elmlist_t * node = less->head; node != NULL; node = node->suc) -// queue(L, node->data); - - -// queue(L, pivotData); - -// for (elmlist_t * node = greater->head; node != NULL; node = node->suc) -// queue(L, node->data); - -// free(less); -// free(greater); -// } - - - - - -void view_list(list_t * L, void (*ptrf)()) { - assert(L && ptrf); - elmlist_t * curr = L->head; - while (curr) { - ptrf(get_data(curr)); - curr = curr->suc; - } - -} -// Return un ptr vers element else NULL -void find(list_t * L, void ** ptrKey, int (*cmpFct)(), void (*delFct)()) { - assert(L && ptrKey && cmpFct); - elmlist_t * curr = L->head; - while (curr) { - if (cmpFct(get_data(curr), *ptrKey) == 0) { - if (delFct) - delFct(ptrKey); - *ptrKey = get_data(curr); - return; - } - curr = curr->suc; - } -} diff --git a/src/list_elm.c b/src/list_elm.c deleted file mode 100644 index aa173dfff979ad64483a740e38fcb96bc7977d6b..0000000000000000000000000000000000000000 --- a/src/list_elm.c +++ /dev/null @@ -1,52 +0,0 @@ -#include <stdlib.h> -#include <assert.h> -#include "list_elm.h" - -list_elm_t * new_list_elm ( void * data ){ - list_elm_t * E = calloc(1,sizeof(list_elm_t)); - assert(E); - E->data = data; - return E; -} - -void del_list_elm( list_elm_t * * E, void (*ptrf)() ){ - assert(E && *E); - if (ptrf) { - ptrf((*E)->data); - } - free(*E); - *E = NULL; -} - -list_elm_t * get_suc ( list_elm_t * E ){ - assert(E); - return E->suc; -} -list_elm_t * get_pred ( list_elm_t * E ); -void * get_data ( list_elm_t * E ){ - assert(E); - return E->data; -} - -void set_suc ( list_elm_t * E, list_elm_t * S ){ - assert(E); - E->suc = S; -} - -void set_pred ( list_elm_t * E, list_elm_t * P ){ - assert(E); - E->pred = P; -} - -void set_data ( list_elm_t * E, void * data ){ - assert(E); - E->data = data; -} - -void view_list_elm ( list_elm_t * E, void (*ptrf)() ){ - assert(E && ptrf); - for(elmlist_t * courant = E->head; courant; courant = get_suc(E)){ - void * data = E->data; - (*ptrf)(data); - } -} \ No newline at end of file diff --git a/src/main (1).c b/src/main (1).c deleted file mode 100644 index 5bb714ba220f0f322ccdfd5505a945425a638a11..0000000000000000000000000000000000000000 --- a/src/main (1).c +++ /dev/null @@ -1,32 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> - -#include "job.h" -#include "list.h" -#include "list_elm.h" - - -int main(int argc, char ** argv){ - if(argc < 2) exit(-1); - - list_t * G = read_graph(argv[1]); - printf("Liste des tâches lue\n"); - view_list(G, &view_job); - - printf("Liste des tâches triée par degré d'entrée croissant\n"); - quick_sort(G, &iDegreeJobCmp); - view_list(G,&view_job); - - printf("Liste des tâches triée par rang croissant\n"); - ranking(G); - view_list(G,&view_job); - - printf("Prune edges\n"); - prune(G); - view_list(G,&view_job); - - printf("\nMarges totales des tâches\n"); - marges(G); - view_list(G,&view_job); - return 0; -} diff --git a/src/outils.c b/src/outils.c deleted file mode 100644 index 99f432bab42df93f3d155dcc5895506e8cd65ec4..0000000000000000000000000000000000000000 --- a/src/outils.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "outils.h" - - - -/** Integer comparaison */ -int int_cmp(int * a, int * b){ - return *a - *b; -} - -/** Double comparaison */ -int double_cmp(double * a, double * b){ - return ((*a - *b) < -EPSILON) ? -1 : ((*a -*b) > +EPSILON) ? +1 : 0; -} diff --git a/src/rank.c b/src/rank.c deleted file mode 100644 index 1d1438c50d0035f3b9bfc0ed377f7f0d82cbb2ac..0000000000000000000000000000000000000000 --- a/src/rank.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "rank.h" -#include "list_1 (1).h" -#include <stdio.h> -#include <stdlib.h> -#include <assert.h> - - -void ranking(list_t * G){ - -} -void prune(list_t * G){ -assert(G); - -} - -void marges(list_t * G){ -assert(G); - -} \ No newline at end of file