#include #include #include #include "buffer.h" #include "file.h" #define AGRANDISSEMENT 1 struct s_file { size_t nb_elements; size_t curseur; buffer zone; }; file fil_creer(int taille_initiale) { file f = (file) malloc (sizeof (struct s_file)); assert(f); f -> nb_elements = 0; f -> curseur = 0; f -> zone = buf_create (taille_initiale); return f; } void fil_detruire(file f) { buf_free (f -> zone); free (f); } void fil_enfiler(file f, void * val) { if (f-> nb_elements == f -> zone -> size) buf_resize (f -> zone, f -> zone -> size << AGRANDISSEMENT); f -> zone -> elements[f -> nb_elements ++] = val; } void * fil_defiler(file f) { assert(! fil_est_vide(f)); return f -> zone -> elements[f -> curseur ++]; } extern int fil_est_vide(file f) { return (f -> curseur == f -> nb_elements); } #ifdef TEST_FILE int main(int argc, char * argv[]) { file f = fil_creer(10); int i; for (i = 0; i < 20;) { fil_enfiler(f, (void *) i++); fil_enfiler(f, (void *) i++); printf("%d ", (int) fil_defiler(f)); } while (! fil_est_vide(f)) printf("%d ", (int) fil_defiler(f)); exit(EXIT_SUCCESS); } #endif