37 lines
801 B
C
37 lines
801 B
C
|
#include "buffer.h"
|
||
|
#include <stdio.h>
|
||
|
|
||
|
Buffer createBuffer(FILE* file) {
|
||
|
Buffer buffer = {
|
||
|
.data = 0,
|
||
|
.used_bits = 0,
|
||
|
.linked_file = file
|
||
|
};
|
||
|
|
||
|
return buffer;
|
||
|
}
|
||
|
|
||
|
void flushBuffer(Buffer* buffer) {
|
||
|
// TODO: 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;
|
||
|
}
|
||
|
|
||
|
void pushToBuffer(int 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;
|
||
|
}
|