Merge remote-tracking branch 'origin/master'

# Conflicts:
#	table.c
#	table.h
This commit is contained in:
alejeune 2023-04-06 11:08:57 +02:00
commit de931ee17f
2 changed files with 46 additions and 4 deletions

35
table.c
View file

@ -1,6 +1,24 @@
#include <table.h> #include <table.h>
#include <stdlib.h>
/*
/*At the start of the execution : the whole array is empty*/
symbolTable = malloc(sizeof(symbol) * START_TABLE_SIZE)
currentIndex = 0;
maxIndex = START_TABLE_SIZE;
/*Checks for the length of the array and reallocates if necessary*/
void checkArraySanity(){
if (currentIndex == maxIndex){
reallocateArray(maxIndex * 2);
} else {
if (currentIndex < maxIndex / 2){
reallocateArray(maxIndex / 2);
}
}
}
/*
Suppress variable dont la profondeur est plus grande Suppress variable dont la profondeur est plus grande
add element */ add element */
@ -32,7 +50,7 @@ Symbol getStruct(Symbol* tab, int endingIndex, char* name){
/* Récupérer l'index d'une valeur dans le tableau*/ /* Récupérer l'index d'une valeur dans le tableau*/
int getIndex(Symbol* tab, int endingIndex, char* name){ int getIndex(Symbol* tab, int endingIndex, char* name){
for(int i=0; i < endingIndex; i++){ for(int i=0; i < endingIndex; i++){
if (strcmp(tab[i].name, &name) == 0){ if (strcmp(tab[i].name, &name) == 0){
return i; return i;
} }
} }
@ -54,7 +72,7 @@ void addElement(Symbol *tab, int endingIndex, Symbol element){
tab[endingIndex].name = element.name; tab[endingIndex].name = element.name;
tab[endingIndex].init = element.init; tab[endingIndex].init = element.init;
tab[endingIndex].varType = element.varType; tab[endingIndex].varType = element.varType;
tab[endingIndex].offset = initOffset(&tab, endingIndex -1); tab[endingIndex].offset = initOffset(&tab, endingIndex -1);
tab[endingIndex].deep = element.deep; tab[endingIndex].deep = element.deep;
} }
endingIndex ++; // faudra la mettre en variable globale endingIndex ++; // faudra la mettre en variable globale
@ -84,3 +102,14 @@ suppressElement(Symbol *tab, int endingIndex, Symbol element){
endingIndex --; // variable globale endingIndex --; // variable globale
} }
void reallocateArray(int size){
Symbol* newSymbolTable = malloc(sizeof (symbol) * size); // we double the size of the array
Symbol* oldSymbolTable = symbolTable; // we double the size of the array
free(oldSymbolTable);
for(int i = 0; i < currentIndex; i++){
newSymbolTable[i] = oldSymbolTable[i];
}
symbolTable = newSymbolTable;
}

15
table.h
View file

@ -1,7 +1,17 @@
#ifndef TABLE_H
#define TABLE_H
#include <stdio.h> #include <stdio.h>
#include <stdbool.h> #include <stdbool.h>
enum enumVarType {INT, FLOAT}; // a adapter enum enumVarType {INT, FLOAT}; // a adapter
/*defined constants*/
#define START_TABLE_SIZE 128;
/*indexes in the array*/
static int currentIndex;
static int maxIndex;
static symbol* symbolTable;
typedef struct { typedef struct {
char* name; char* name;
@ -11,4 +21,7 @@ typedef struct {
int deep; int deep;
} Symbol; } Symbol;
void reallocateArray(int size);
void checkArraySanity();
#endif