Commit 4217b128 authored by david's avatar david
Browse files

Ajout des fonctions d'augmentation et de réduction

parent 225fe7ba
CC= gcc CC= gcc
CXXFLAGS= -Wall -ansi --pedantic CXXFLAGS= -Wall -ansi --pedantic -O3
CPP_O_FILE = arraylist.o analyzer.o main.o CPP_O_FILE = arraylist.o analyzer.o main.o
LIB = -lm LIB = -lm
......
...@@ -21,10 +21,9 @@ void arraylist_destroy(arraylist_t * a){ ...@@ -21,10 +21,9 @@ void arraylist_destroy(arraylist_t * a){
char arraylist_append(arraylist_t * a, int x){ char arraylist_append(arraylist_t * a, int x){
char memory_allocation = FALSE; char memory_allocation = FALSE;
if( a!=NULL ){ if( a!=NULL ){
if( arraylist_enlarging_capacity(a) ){ if( arraylist_do_we_need_to_enlarge_capacity(a) ){
memory_allocation = TRUE; memory_allocation = TRUE;
a->capacity *= 2; arraylist_enlarge_capacity(a);
a->data = (int *) realloc(a->data, sizeof(int) * a->capacity);
} }
a->data[a->size++] = x; a->data[a->size++] = x;
} }
...@@ -34,10 +33,9 @@ char arraylist_append(arraylist_t * a, int x){ ...@@ -34,10 +33,9 @@ char arraylist_append(arraylist_t * a, int x){
char arraylist_pop_back(arraylist_t * a){ char arraylist_pop_back(arraylist_t * a){
char memory_reduction = FALSE; char memory_reduction = FALSE;
if( a!=NULL && a->size>0 ){ if( a!=NULL && a->size>0 ){
if( arraylist_reducing_capacity(a) ){ if( arraylist_do_we_need_to_reduce_capacity(a) ){
memory_reduction = TRUE; memory_reduction = TRUE;
a->capacity /= 2; arraylist_reduce_capacity(a);
a->data = (int *) realloc(a->data, sizeof(int) * a->capacity);
} }
a->size--; a->size--;
} }
...@@ -57,10 +55,20 @@ size_t arraylist_get_size(arraylist_t * a){ ...@@ -57,10 +55,20 @@ size_t arraylist_get_size(arraylist_t * a){
return ( a!=NULL) ? a->size : -1; return ( a!=NULL) ? a->size : -1;
} }
char arraylist_enlarging_capacity(arraylist_t * a){ char arraylist_do_we_need_to_enlarge_capacity(arraylist_t * a){
return ( a->size >= (a->capacity * 3)/4 )? TRUE: FALSE; return ( a->size >= (a->capacity * 3)/4 )? TRUE: FALSE;
} }
char arraylist_reducing_capacity(arraylist_t * a){ void arraylist_enlarge_capacity(arraylist_t * a){
a->capacity *= 2;
a->data = (int *) realloc(a->data, sizeof(int) * a->capacity);
}
char arraylist_do_we_need_to_reduce_capacity(arraylist_t * a){
return ( a->size <= a->capacity/4 && a->size >4 )? TRUE: FALSE; return ( a->size <= a->capacity/4 && a->size >4 )? TRUE: FALSE;
} }
void arraylist_reduce_capacity(arraylist_t * a){
a->capacity /= 2;
a->data = (int *) realloc(a->data, sizeof(int) * a->capacity);
}
...@@ -77,14 +77,27 @@ size_t arraylist_get_size(arraylist_t * a); ...@@ -77,14 +77,27 @@ size_t arraylist_get_size(arraylist_t * a);
@param a est un pointeur vers un tableau. @param a est un pointeur vers un tableau.
@returns VRAI si le tableau doit être agrandi, FAUX sinon. @returns VRAI si le tableau doit être agrandi, FAUX sinon.
*/ */
char arraylist_enlarging_capacity(arraylist_t * a); char arraylist_do_we_need_to_enlarge_capacity(arraylist_t * a);
/**
Cette fonction augmente la capacité du tableau.
@param a est un pointeur vers un tableau.
*/
void arraylist_enlarge_capacity(arraylist_t * a);
/** /**
Cette fonction détermine la règle selon laquelle un espace mémoire plus petit sera alloué ou non. Cette fonction détermine la règle selon laquelle un espace mémoire plus petit sera alloué ou non.
@param a est un pointeur vers un tableau. @param a est un pointeur vers un tableau.
@returns VRAI si le tableau doit être réduit, FAUX sinon. @returns VRAI si le tableau doit être réduit, FAUX sinon.
*/ */
char arraylist_reducing_capacity(arraylist_t * a); char arraylist_do_we_need_to_reduce_capacity(arraylist_t * a);
/**
Cette fonction réduit la capacité du tableau.
@param a est un pointeur vers un tableau.
*/
void arraylist_reduce_capacity(arraylist_t * a);
#endif #endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment