#include #include #include #include "vecteur.h" #define NB_ELEM_INITIAL 3 struct vecteur { void **debut; long taille; long nombre_elements; int mode_bavard; }; vecteur vecteur_creer(void) { vecteur recv = malloc(sizeof(struct vecteur)); assert(recv != NULL); recv->debut = calloc(NB_ELEM_INITIAL, sizeof(void*)); assert(recv->debut != NULL); recv->taille = NB_ELEM_INITIAL; recv->nombre_elements = 0; recv->mode_bavard = 0; return recv; } void vecteur_detruire(vecteur recv) { free(recv->debut); free(recv); } void vecteur_ecrire(vecteur recv, int indice, void *valeur) { void **p; long taille = recv->taille; while (indice >= taille) taille = 2 * taille + 1; if (taille > recv->taille) { recv->debut = realloc(recv->debut, taille * sizeof(void*)); assert(recv->debut != NULL); for (p = recv->debut + recv->taille; p < recv->debut + taille; p++) *p = NULL; if (recv->mode_bavard) { fprintf(stderr, ">>vecteur: extension de %d a %d\n", recv->taille, taille); } recv->taille = taille; } recv->debut[indice] = valeur; if (recv->nombre_elements < indice+1) recv->nombre_elements = indice+1; } void *vecteur_lire(vecteur recv, int indice) { assert(indice >= 0); assert(indice < recv->nombre_elements); return recv->debut[indice]; } int vecteur_nombre_elements(vecteur recv) { return recv->nombre_elements; } void vecteur_mode_bavard(vecteur recv, int mode) { recv->mode_bavard = mode; }