From bd0c0afd893d6eb25bb24fbbdf6055d05ff16d89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre=20=E2=9C=8F?= Date: Sat, 19 Nov 2016 14:58:05 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20d'un=20compteur=20d'octets=20=C3=A9crit?= =?UTF-8?q?s=20dans=20les=20tampons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/buffer.h | 12 ++++++++++-- src/buffer.c | 8 +++++++- 2 files changed, 17 insertions(+), 3 deletions(-) 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);