Ajout d'un compteur d'octets écrits dans les tampons

This commit is contained in:
Mattéo Delabre 2016-11-19 14:58:05 +01:00
parent f8f9ae667e
commit bd0c0afd89
2 changed files with 17 additions and 3 deletions

View File

@ -9,13 +9,16 @@
*/ */
typedef struct Buffer Buffer; typedef struct Buffer Buffer;
struct 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 // Contient les données du tampon, c'est-à-dire
// les données en attente de vidage dans le fichier // les données en attente de vidage dans le fichier
char data; char data;
// Nombre de bits utilisés dans le tampon. Si ce // Nombre de bits utilisés dans le tampon. Si ce
// nombre vaut 8, le tampon est plein // nombre vaut 8, le tampon est plein
int used_bits; size_t used_bits;
// Fichier dans lequel le tampon est vidé à l'appel // Fichier dans lequel le tampon est vidé à l'appel
// de `flushBuffer` ou au débordement // de `flushBuffer` ou au débordement
@ -31,7 +34,12 @@ Buffer createBuffer(FILE*);
* Pousse le bit donné dans le tampon passé. * Pousse le bit donné dans le tampon passé.
* Si le tampon déborde, le vide dans le fichier lié * 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 * Vide le tampon dans son fichier et le réinitialise

View File

@ -5,6 +5,7 @@
Buffer createBuffer(FILE* file) { Buffer createBuffer(FILE* file) {
Buffer buffer = { Buffer buffer = {
.flushed_bytes = 0,
.data = 0, .data = 0,
.used_bits = 0, .used_bits = 0,
.linked_file = file .linked_file = file
@ -13,6 +14,10 @@ Buffer createBuffer(FILE* file) {
return buffer; return buffer;
} }
size_t getFlushedBytes(Buffer* buffer) {
return buffer->flushed_bytes;
}
void flushBuffer(Buffer* buffer) { void flushBuffer(Buffer* buffer) {
// FIXME: gérer les erreurs d'écriture // FIXME: gérer les erreurs d'écriture
@ -22,9 +27,10 @@ void flushBuffer(Buffer* buffer) {
buffer->data = 0; buffer->data = 0;
buffer->used_bits = 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 // Si le tampon déborde, écriture dans le fichier
if (buffer->used_bits == 8) { if (buffer->used_bits == 8) {
flushBuffer(buffer); flushBuffer(buffer);