commit c8beb6a10af5403928380d99252c0acf8a1bc55f
parent 2621a3f54ebd9036c7360f2cb3cad701cc8cc345
Auteur: Loïc Daignault-Pichette <loic@asteride.xyz>
Date: Fri, 3 Apr 2026 17:48:51 -0400
Supprimer deux fonctions et en ajouter une
Les fonctions tampinf_plc() et tampinf_ajt() s’accordaient mal au nouvel
esprit de la bibliothèque tampinf. Elles ont été remplacées par
tampinf_minim(), qui assure qu’un tampinf puisse contenir un élément à
un certain index, en l’agrandissant s’il le faut.
Diffstat:
| M | tampinf.c | | | 78 | +++++++++++++++++------------------------------------------------------------- |
| M | tampinf.h | | | 10 | +++------- |
2 fichiers modifiés, 20 insertions(+), 68 suppressions(-)
diff --git a/tampinf.c b/tampinf.c
@@ -42,11 +42,6 @@ typedef union entete {
long alignement;
} Entete;
-/* Faire qu’un tampon soit au moins aussi grand que lngr.
- * Prend pour acquis que la longueur du tampon est inférieure à lngr.
- * Renvoie l’adresse du tampon, ou NULL en cas d’erreur. */
-static void *tampinf_agr(void *ti, size_t lngr);
-
void *
tampinf_init(size_t lngr, size_t tll)
{
@@ -88,44 +83,32 @@ tampinf_libr(void *ti)
}
void *
-tampinf_plc(void *ti, size_t i, size_t n, void *elem)
+tampinf_minim(void *ti, size_t i)
{
- TAMPINF_COHERENT(ti);
- assert(n > 0);
- assert(elem);
-
- /* Agrandir le tampon s’il est trop petit.
- * La taille minimale que le tampon devrait avoir est i + n. */
- if (ENTETE(ti)->s.lngr < i + n
- && (ti = tampinf_agr(ti, i + n)) == NULL)
- return NULL;
-
- memcpy((char *)ti + (i * ENTETE(ti)->s.tll), elem,
- n * ENTETE(ti)->s.tll);
-
- /* Mettre à jour nelem s’il le faut. */
- if (i + n > ENTETE(ti)->s.nelem)
- ENTETE(ti)->s.nelem = i + n;
+ size_t nlngr; /* Nouvelle longueur. */
+ Entete *nent; /* Nouvelle entête. */
TAMPINF_COHERENT(ti);
- return ti;
-}
+ if (ENTETE(ti)->s.lngr > i)
+ return ti;
-void *
-tampinf_ajt(void *ti, size_t n, void *elem)
-{
- TAMPINF_COHERENT(ti);
- assert(n > 0);
- assert(elem);
+ /* Doubler la longueur jusqu’à ce quelle soit supérieure ou égale à la
+ * longueur recherchée. */
+ for (nlngr = ENTETE(ti)->s.lngr; nlngr <= i; nlngr *= 2)
+ ;
- /* Placer elem à ti->nelem. */
- if ((ti = tampinf_plc(ti, ENTETE(ti)->s.nelem, n, elem)) == NULL)
+ /* Agrandir le tampon et en initialiser à zéro la nouvelle partie. */
+ if ((nent = realloc(ENTETE(ti),
+ sizeof(Entete) + nlngr * ENTETE(ti)->s.tll)) == NULL)
return NULL;
+ memset((char *)TAMPON(nent) + nent->s.lngr * nent->s.tll, 0,
+ (nlngr - nent->s.lngr) * nent->s.tll);
+ nent->s.lngr = nlngr;
- TAMPINF_COHERENT(ti);
+ TAMPINF_COHERENT(TAMPON(nent));
- return ti;
+ return TAMPON(nent);
}
size_t
@@ -153,30 +136,3 @@ tampinf_dedans(void *ti, size_t i)
return 1;
return 0;
}
-
-static void *
-tampinf_agr(void *ti, size_t lngr)
-{
- size_t nlngr; /* Nouvelle longueur. */
- Entete *nent; /* Nouvelle entête. */
-
- TAMPINF_COHERENT(ti);
- assert(ENTETE(ti)->s.lngr < lngr);
-
- /* Doubler la longueur jusqu’à ce quelle soit supérieure ou égale à la
- * longueur recherchée. */
- for (nlngr = ENTETE(ti)->s.lngr; nlngr < lngr; nlngr *= 2)
- ;
-
- /* Agrandir le tampon et en initialiser à zéro la nouvelle partie. */
- if ((nent = realloc(ENTETE(ti),
- sizeof(Entete) + nlngr * ENTETE(ti)->s.tll)) == NULL)
- return NULL;
- memset((char *)TAMPON(nent) + nent->s.lngr * nent->s.tll, 0,
- (nlngr - nent->s.lngr) * nent->s.tll);
- nent->s.lngr = nlngr;
-
- TAMPINF_COHERENT(TAMPON(nent));
-
- return TAMPON(nent);
-}
diff --git a/tampinf.h b/tampinf.h
@@ -25,13 +25,9 @@ void tampinf_reinit(void *ti);
/* Libérer l’espace utilisé par le tampon ti. */
void tampinf_libr(void *ti);
-/* Placer n éléments contenus dans elem à l’emplacement i dans le tampon ti.
- * Renvoie i, ou -1 en cas d’erreur. */
-void *tampinf_plc(void *ti, size_t i, size_t n, void *elem);
-
-/* Ajouter au tampon ti n éléments contenus dans elem.
- * Renvoie l’indice du nouvel élément, ou -1 en cas d’erreur. */
-void *tampinf_ajt(void *ti, size_t n, void *elem);
+/* Assurer que le tampon ti puisse contenir un élément à l’index i.
+ * Renvoie l’adresse du tampon, ou NULL en cas d’erreur. */
+void *tampinf_minim(void *ti, size_t i);
/* Obtenir le nombre d’éléments contenus dans le tampon ti. */
size_t tampinf_nelem(void *ti);