diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/array.c | 58 | ||||
-rw-r--r-- | src/common/array.h | 3 |
2 files changed, 61 insertions, 0 deletions
diff --git a/src/common/array.c b/src/common/array.c index e4e7bb1..f520d1d 100644 --- a/src/common/array.c +++ b/src/common/array.c @@ -157,6 +157,64 @@ void unlock_flat_array(flat_array_t **array) /****************************************************************************** * * +* Paramètres : array = tableau compressé à mettre à jour. [OUT] * +* * +* Description : Réinitialise un tableau sans traitement excessif. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void reset_flat_array(flat_array_t **array) +{ + size_t count; /* Nombre d'éléments présents */ + ext_flat_array_t *extended; /* Version de tableau étendue */ + + assert(FLAT_ARRAY_IS_LOCKED(*array)); + + count = count_flat_array_items(*array); + + switch (count) + { + case 0: + break; + + case 1: + + assert(FLAT_ARRAY_HAS_NO_INDEX(*array)); + + free(GET_LONELY_ITEM(*array)); + + *array = NULL; + + lock_flat_array(array); + + break; + + default: + + assert(!FLAT_ARRAY_HAS_NO_INDEX(*array)); + + extended = EXTENDED_ARRAY(*array); + + free(extended->items); + free(extended); + + *array = NULL; + + lock_flat_array(array); + + break; + + } + +} + + +/****************************************************************************** +* * * Paramètres : array = tableau compressé à consulter. * * * * Description : Indique la quantité d'éléments présents dans le tableau. * diff --git a/src/common/array.h b/src/common/array.h index 2dd5b9f..bdb1ae4 100644 --- a/src/common/array.h +++ b/src/common/array.h @@ -40,6 +40,9 @@ void lock_flat_array(flat_array_t **); /* Déverrouille l'accès à un tableau compressé. */ void unlock_flat_array(flat_array_t **); +/* Réinitialise un tableau sans traitement excessif. */ +void reset_flat_array(flat_array_t **); + /* Indique la quantité d'éléments présents dans le tableau. */ size_t count_flat_array_items(const flat_array_t *); |