From 45187b58a0ae1dfa3d30c26d02556d726faaabf7 Mon Sep 17 00:00:00 2001 From: alejeune Date: Thu, 6 Apr 2023 11:03:34 +0200 Subject: [PATCH] added getters and setters --- table.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ table.h | 6 ++--- 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/table.c b/table.c index 76fa009..74f8c5f 100644 --- a/table.c +++ b/table.c @@ -1,2 +1,86 @@ #include +/* +Suppress variable dont la profondeur est plus grande +add element */ + +/* a avoir +tableau, length, esp, indexTab */ + +/* Fonction d'affichage des erreurs */ +void error(char * mess){ + printf("ERROR : %s\n", &mess); + exit(-1); +} + + +/* Récupérer l'addresse à partir du nom */ +int getOffset(int esp, char* name, Symbol *tab, int endingIndex){ + return (esp + getStruct(&tab, endingIndex, &name).offset); +} + +/* Récupérer la structure d'un élement à partir du nom */ +Symbol getStruct(Symbol* tab, int endingIndex, char* name){ + for(int i=0; i < endingIndex; i++){ + if (tab[i].name == name){ + return tab[i]; + } + } + error("No structure found"); +} + +/* Récupérer l'index d'une valeur dans le tableau*/ +int getIndex(Symbol* tab, int endingIndex, char* name){ + for(int i=0; i < endingIndex; i++){ + if (strcmp(tab[i].name, &name) == 0){ + return i; + } + } + error("No index found"); +} + + +/* Toggle le init */ +void toggleInit(char *name, Symbol *tab, int endingIndex){ + tab[getIndex(&tab, endingIndex, &name)].init = true; +} + +/* Ajoute un élément */ +void addElement(Symbol *tab, int endingIndex, Symbol element){ + if (endingIndex == 0){ + tab[0] = element; + } + else { + tab[endingIndex].name = element.name; + tab[endingIndex].init = element.init; + tab[endingIndex].varType = element.varType; + tab[endingIndex].offset = initOffset(&tab, endingIndex -1); + tab[endingIndex].deep = element.deep; + } + endingIndex ++; // faudra la mettre en variable globale +} + +/* Calcule l'offset à partir de l'offset de l'élément précédent */ +int initOffset(Symbol *tab, int index){ + int offset = 0; + switch (tab[index].varType){ + case INT: + return (tab[index].offset + 1); + break; + case FLOAT: + return (tab[index].offset + 1); + break; + default: + error("Impossible to compute the nexw offset"); + } +} + + +/* Supprimer un élément de la table des symboles */ +suppressElement(Symbol *tab, int endingIndex, Symbol element){ + for(int i = getIndex(&tab, endingIndex, element.name); i < (endingIndex - 1); i ++){ + tab[i] = tab[i+1]; + } + endingIndex --; // variable globale +} + diff --git a/table.h b/table.h index bb4d3be..def0186 100644 --- a/table.h +++ b/table.h @@ -1,14 +1,14 @@ #include #include -enum enumVarType {INT, FLOAT, CHAR, STRING}; +enum enumVarType {INT, FLOAT}; // a adapter -struct symbol { +typedef struct { char* name; bool init; enumVarType varType; int offset; int deep; -}; +} Symbol;