diff --git a/inc/buffer.h b/inc/buffer.h index 9116fac..929c54c 100644 --- a/inc/buffer.h +++ b/inc/buffer.h @@ -9,13 +9,16 @@ */ typedef struct Buffer Buffer; struct Buffer { + // Compte le nombre d'octets écrits dans le fichier + size_t flushed_bytes; + // Contient les données du tampon, c'est-à-dire // les données en attente de vidage dans le fichier char data; // Nombre de bits utilisés dans le tampon. Si ce // nombre vaut 8, le tampon est plein - int used_bits; + size_t used_bits; // Fichier dans lequel le tampon est vidé à l'appel // de `flushBuffer` ou au débordement @@ -31,7 +34,12 @@ Buffer createBuffer(FILE*); * Pousse le bit donné dans le tampon passé. * Si le tampon déborde, le vide dans le fichier lié */ -void pushToBuffer(int bit, Buffer*); +void pushToBuffer(char bit, Buffer*); + +/** + * Récupère le nombre de fois qu'on a écrit un octet dans le fichier lié + */ +size_t getFlushedBytes(Buffer*); /** * Vide le tampon dans son fichier et le réinitialise diff --git a/src/buffer.c b/src/buffer.c index aa0a0bb..ea7e0a8 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -5,6 +5,7 @@ Buffer createBuffer(FILE* file) { Buffer buffer = { + .flushed_bytes = 0, .data = 0, .used_bits = 0, .linked_file = file @@ -13,6 +14,10 @@ Buffer createBuffer(FILE* file) { return buffer; } +size_t getFlushedBytes(Buffer* buffer) { + return buffer->flushed_bytes; +} + void flushBuffer(Buffer* buffer) { // FIXME: gérer les erreurs d'écriture @@ -22,9 +27,10 @@ void flushBuffer(Buffer* buffer) { buffer->data = 0; buffer->used_bits = 0; + buffer->flushed_bytes += 1; } -void pushToBuffer(int bit, Buffer* buffer) { +void pushToBuffer(char bit, Buffer* buffer) { // Si le tampon déborde, écriture dans le fichier if (buffer->used_bits == 8) { flushBuffer(buffer);