From b9b9e351154aac0312149f38bdc06bcaeceeed37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre=20=E2=9C=8F?= Date: Sun, 20 Nov 2016 01:40:24 +0100 Subject: [PATCH] Utilisation d'entiers 64 pour le stockage de la taille --- inc/buffer.h | 5 +++-- src/buffer.c | 2 +- src/compress.c | 16 +++++++++------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/inc/buffer.h b/inc/buffer.h index 5af8087..ba34269 100644 --- a/inc/buffer.h +++ b/inc/buffer.h @@ -2,6 +2,7 @@ #define __IN303_BUFFER_H__ #include +#include /** * Tampon permettant d'abstraire l'écriture dans un fichier bit par @@ -20,7 +21,7 @@ struct WriteBuffer { // Nombre d'octets écrits par le tampon d'écriture dans le // fichier, correspondant au nombre de vidages du tampon - size_t flushed_count; + uint64_t flushed_count; // Fichier dans lequel le tampon d'éciture est vidé à l'appel // de `flushBuffer` ou au débordement @@ -48,7 +49,7 @@ void flushBuffer(WriteBuffer*); * Récupère le nombre de vidages effectués sur le tampon d'écriture, * correspondant au nombre d'octets écrits par le tampon dans le fichier */ -size_t getFlushedCount(WriteBuffer*); +uint64_t getFlushedCount(WriteBuffer*); /** * Tampon permettant d'abstraire le lecture depuis un fichier bit par diff --git a/src/buffer.c b/src/buffer.c index 060aab9..2dadc78 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -36,7 +36,7 @@ void flushBuffer(WriteBuffer* buffer) { buffer->flushed_count++; } -size_t getFlushedCount(WriteBuffer* buffer) { +uint64_t getFlushedCount(WriteBuffer* buffer) { return buffer->flushed_count; } diff --git a/src/compress.c b/src/compress.c index ef73e41..3d7b2e6 100644 --- a/src/compress.c +++ b/src/compress.c @@ -9,6 +9,8 @@ #include #include #include +#include +#include /** * Effectuer un comptage des caractères dans le corpus d'entrée. En déduire @@ -16,7 +18,7 @@ * * (résultat à libérer avec `free`) */ -static double* _createFrequencies(FILE*, size_t*); +static double* _createFrequencies(FILE*, uint64_t*); /** * Encoder le fichier d'entrée vers le fichier de sortie @@ -25,7 +27,7 @@ static double* _createFrequencies(FILE*, size_t*); */ static void _encodeFromTable(char**, FILE*, WriteBuffer*); -double* _createFrequencies(FILE* file, size_t* total) { +double* _createFrequencies(FILE* file, uint64_t* total) { double* frequencies = malloc(NUM_CHARS * sizeof(*frequencies)); *total = 0; @@ -76,7 +78,7 @@ void compress(FILE* source, FILE* dest) { // compression moins optimale. // FIXME: éviter la division par zéro pour les fichiers vides printVerbose("Calcul des fréquences d'apparition des caractères.\n"); - size_t start_bytes = 0; + uint64_t start_bytes = 0; double* frequencies = _createFrequencies(source, &start_bytes); if (isVerbose()) { @@ -113,7 +115,7 @@ void compress(FILE* source, FILE* dest) { WriteBuffer output = createWriteBuffer(dest); printVerbose("\nÉcriture des données compressées.\n"); - // - Entier : nombre d'octets dans le fichier originel + // - Entier 64 bits : nombre d'octets dans le fichier originel fwrite(&start_bytes, sizeof(start_bytes), 1, dest); // - Arbre linéarisé : arbre de Huffman permettant le calcul de la clef @@ -126,11 +128,11 @@ void compress(FILE* source, FILE* dest) { flushBuffer(&output); // ÉTAPE 5 : affichage des statistiques de compression et fin - size_t end_bytes = sizeof(start_bytes) + getFlushedCount(&output); + uint64_t end_bytes = sizeof(start_bytes) + getFlushedCount(&output); double gain = ((double) start_bytes - end_bytes) / start_bytes * 100; - printVerbose("Taille originelle : %d octets.\n", start_bytes); - printVerbose("Taille compressée : %d octets.\n", end_bytes); + printVerbose("Taille originelle : %" PRIu64 " octets.\n", start_bytes); + printVerbose("Taille compressée : %" PRIu64 " octets.\n", end_bytes); printVerbose("Gain : %.2f %% !\n", gain); freeTree(tree);