trafi

Transducteurs finis
git clone git://git.asteride.xyz/trafi.git
Journaux | Fichiers | Références

tampex.h (2191B)


      1 #ifndef TAMPEX_H
      2 #define TAMPEX_H
      3 
      4 #include <stdbool.h>
      5 #include <stddef.h>
      6 #include <sys/types.h>
      7 
      8 /* Un tampex est un tampon extensible. Cette bibliothèque est une interface
      9  * devant malloc(3), realloc(3) et free(3). Elle dispense de retenir
     10  * explicitement la longueur d’un tampon, la taille des objets qui y sont
     11  * placés ainsi que leur nombre. */
     12 
     13 /* Initialiser un tampon pouvant contenir au moins lngr objets de tll octets
     14  * chacun.
     15  * Le contenu du tampon est initialisé à zéro.
     16  * Renvoie le tampon, ou NULL en cas d’erreur. */
     17 void *tampex_init(size_t lngr, size_t tll);
     18 
     19 /* Réinitialiser le tampon te.
     20  * Son contenu est aussi réinitialisé à zéro. */
     21 void tampex_reinit(void *te);
     22 
     23 /* Libérer l’espace utilisé par le tampon te. */
     24 void tampex_libr(void *te);
     25 
     26 /* Assurer que le tampon te soit assez grand pour contenir un élément à l’index
     27  * i et l’agrandir si nécessaire.
     28  * Renvoie i, ou -1 en cas d’erreur.
     29  * En cas d’erreur, *te est laissé intact.
     30  * Le champ nelem du tampex est augmenté à i + 1, si cette nouvelle valeur le
     31  * fait vraiment augmenter. Il est possible, si le tampex doit être agrandi,
     32  * que le tampon doive être déplacé. te est alors modifié en conséquence. Il
     33  * s’en suit que toute référence au contenu d’un tampex doit être relative à la
     34  * position en mémoire du tampon. */
     35 ssize_t tampex_minim(void **te, size_t i);
     36 
     37 /* Augmenter nelem d’un et agrandir le tampon si besoin.
     38  * Renvoie le nombre d’éléments contenus dans le tampon, ou -1 en cas
     39  * d’erreur. */
     40 ssize_t tampex_empl(void **te);
     41 
     42 /* Diminuer nelem d’un.
     43  * Renvoie l’indice de l’éléments dépilé.
     44  * Prend pour acquis que le tampex contient au moins un élément. */
     45 size_t tampex_dpl(void *te);
     46 
     47 /* Obtenir le nombre d’éléments contenus dans le tampon te.
     48  * Ce nombre correspond à la valeur de i la plus élevée donnée à
     49  * tampex_minim(). */
     50 size_t tampex_nelem(void *te);
     51 
     52 /* Obtenir l’espace utilisé par les éléments du tampon te. */
     53 size_t tampex_esp(void *te);
     54 
     55 /* Renvoie 1 si l’indice i est dans la partie utilisée du tampon, 0
     56  * autrement. */
     57 bool tampex_dedans(void *te, size_t i);
     58 
     59 #endif