From dde622ccf567e3ac01b471ea5d35cca4acf81277 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Thu, 30 May 2019 12:36:48 +0200
Subject: Extended the API to insert items in a sorted array.

---
 src/common/sort.c | 30 ++++++++++++++++++++++++++++++
 src/common/sort.h |  3 +++
 2 files changed, 33 insertions(+)

diff --git a/src/common/sort.c b/src/common/sort.c
index eee11a3..e34d995 100644
--- a/src/common/sort.c
+++ b/src/common/sort.c
@@ -305,6 +305,36 @@ void *qinsert(void *base, size_t *nmemb, size_t size, __compar_fn_t compar, void
 
 /******************************************************************************
 *                                                                             *
+*  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.                *
+*                compar = méthode de comparaison entre éléments.              *
+*                new    = nouvel élément à insérer.                           *
+*                                                                             *
+*  Description : Ajoute au bon endroit un élément dans un tableau trié.       *
+*                                                                             *
+*  Retour      : Nouvel emplacement du tableau agrandi.                       *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+void *qinsert_multi(void *base, size_t *nmemb, size_t size, __compar_fn_t compar, void *new)
+{
+    void *result;                           /* Tableau trié à retourner    */
+    size_t index;                           /* Indice du point d'insertion */
+
+    bsearch_index(new, base, *nmemb, size, compar, &index);
+
+    result = _qinsert(base, nmemb, size, new, index);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
 *  Paramètres  : base  = adresse du tableau à parcourir.                      *
 *                nmem  = 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 2d9e672..eb86ccb 100644
--- a/src/common/sort.h
+++ b/src/common/sort.h
@@ -52,6 +52,9 @@ void *_qinsert(void *, size_t *, size_t, void *, size_t);
 /* Ajoute au bon endroit un élément dans un tableau trié. */
 void *qinsert(void *, size_t *, size_t, __compar_fn_t, void *);
 
+/* Ajoute au bon endroit un élément dans un tableau trié. */
+void *qinsert_multi(void *, size_t *, size_t, __compar_fn_t, void *);
+
 /* Supprime un élément dans un tableau trié. */
 void *_qdelete(void *, size_t *, size_t, size_t);
 
-- 
cgit v0.11.2-87-g4458