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;
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

View File

@ -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);