#ifndef VEX #define VEX #include typedef struct vex *vex; /* ce module traite de vecteurs extensibles d'objets * l'espace réellement utilisé est compris dans * [MIN(taille_min,_cardinal(v)) , * vex_cardinal(v) * facteur_agrandissement²] */ typedef void *(*reallouer_f) (void *, size_t); /* fonction équivalente à realloc i.e. * realloc(NULL,t) est équivalent à malloc(t) * realloc(p,0) est équivalent à free(p) */ vex vex_creer (size_t taille_min, size_t facteur_agrandissement, reallouer_f reallouer); /* contraintes: * taille_min > 0 * facteur_agrandissement > 1 * reallouer != NULL */ void vex_detruire (vex v); void **vex_vers_vecteur (vex v); /* retourne un vecteur de vex_cardinal(v) éléments, * détruit v */ size_t vex_cardinal (vex v); void *vex_valeur_element (vex v, size_t i); /* retourne v[i] * contrainte : i < vex_cardinal(v) */ void vex_affecter_element (vex v, size_t i, void *element); /* v[i] = element * contrainte : i < vex_cardinal(v) */ void vex_inserer (vex v, size_t position, size_t count); /* insère "count" cases à partir de l'indice position * contrainte : position <= vex_cardinal(v) */ void vex_supprimer (vex v, size_t position, size_t count); /* supprime "count" cases à partir de l'indice position * contrainte : position + count - 1 < vex_cardinal(v) */ void vex_ajouter_element (vex v, void *element); /* équivalent à * vex_inserer (v, vex_cardinal(v), 1); * vex_affecter_element (v, vex_cardinal(v)-1,element) */ #endif