50 lines
1.1 KiB
C
50 lines
1.1 KiB
C
#ifndef __IN303_BUFFER_H__
|
|
#define __IN303_BUFFER_H__
|
|
|
|
#include <stdio.h>
|
|
|
|
/**
|
|
* Informations sur un tampon de 8 caractères.
|
|
* Utiliser `createBuffer` pour initialiser un tampon
|
|
*/
|
|
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
|
|
size_t used_bits;
|
|
|
|
// Fichier dans lequel le tampon est vidé à l'appel
|
|
// de `flushBuffer` ou au débordement
|
|
FILE* linked_file;
|
|
};
|
|
|
|
/**
|
|
* Initialise un tampon vide lié au fichier donné
|
|
*/
|
|
Buffer createBuffer(FILE*);
|
|
|
|
/**
|
|
* Pousse le bit donné dans le tampon passé.
|
|
* Si le tampon déborde, le vide dans le fichier lié
|
|
*/
|
|
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
|
|
*/
|
|
void flushBuffer(Buffer*);
|
|
|
|
#endif
|