diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/sort.c | 35 | ||||
-rw-r--r-- | src/common/sort.h | 3 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/common/sort.c b/src/common/sort.c index e34d995..a905440 100644 --- a/src/common/sort.c +++ b/src/common/sort.c @@ -267,6 +267,41 @@ void *_qinsert(void *base, size_t *nmemb, size_t size, void *new, size_t index) /****************************************************************************** * * +* Paramètres : base = adresse du tableau à parcourir. * +* nmemb = nombre d'éléments présents au total. [OUT] * +* size = taille de chaque élément du tableau. * +* new = nouveaux éléments à insérer. * +* count = quantité de ces nouveaux éléments. * +* index = indice du point d'insertion. * +* * +* Description : Ajoute à l'endroit indiqué des éléments dans un tableau. * +* * +* Retour : Nouvel emplacement du tableau agrandi. * +* * +* Remarques : - * +* * +******************************************************************************/ + +void *_qinsert_batch(void *base, size_t *nmemb, size_t size, void *new, size_t count, size_t index) +{ + void *result; /* Tableau trié à retourner */ + + result = realloc(base, (*nmemb + count) * size); + + if (index < *nmemb) + memmove((char *)result + (index + count) * size, (char *)result + index * size, (*nmemb - index) * size); + + (*nmemb) += count; + + memcpy((char *)result + index * size, new, count * size); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : base = adresse du tableau à parcourir. * * nmemb = nombre d'éléments présents au total. [OUT] * * size = taille de chaque élément du tableau. * diff --git a/src/common/sort.h b/src/common/sort.h index eb86ccb..7362f64 100644 --- a/src/common/sort.h +++ b/src/common/sort.h @@ -49,6 +49,9 @@ bool bsearch_index(const void *, const void *, size_t, size_t, __compar_fn_t, si /* Ajoute à l'endroit indiqué un élément dans un tableau. */ void *_qinsert(void *, size_t *, size_t, void *, size_t); +/* Ajoute à l'endroit indiqué des éléments dans un tableau. */ +void *_qinsert_batch(void *, size_t *, size_t, void *, size_t, size_t); + /* Ajoute au bon endroit un élément dans un tableau trié. */ void *qinsert(void *, size_t *, size_t, __compar_fn_t, void *); |