#include "common.h" #include "buffer.h" #include Buffer createBuffer(FILE* file) { Buffer buffer = { .flushed_bytes = 0, .data = 0, .used_bits = 0, .linked_file = file }; return buffer; } size_t getFlushedBytes(Buffer* buffer) { return buffer->flushed_bytes; } void flushBuffer(Buffer* buffer) { // FIXME: gérer les erreurs d'écriture // Alignement des données à gauche de l'octet buffer->data <<= 8 - buffer->used_bits; fputc(buffer->data, buffer->linked_file); buffer->data = 0; buffer->used_bits = 0; buffer->flushed_bytes += 1; } void pushToBuffer(char bit, Buffer* buffer) { // Si le tampon déborde, écriture dans le fichier if (buffer->used_bits == 8) { flushBuffer(buffer); } // Insertion de chaque bit de l'étiquette dans // le tampon de sortie buffer->data <<= 1; buffer->data |= bit; buffer->used_bits += 1; }