summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2020-01-27 18:48:58 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2020-01-27 18:48:58 (GMT)
commitc1ca03be00a4e975f89d30edfb72b57fb5612282 (patch)
tree4884513252458a261eb1290c93748b2bbbd98ff8 /src/common
parent1b3887c5609831bc2aee2f00f6a4d31d7406a225 (diff)
Created a huge optimization for the Dex format loading.
Diffstat (limited to 'src/common')
-rw-r--r--src/common/sort.c35
-rw-r--r--src/common/sort.h3
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 *);