Files

72 lines
2.4 KiB
C
Raw Permalink Normal View History

2024-10-24 16:29:20 +02:00
/************************************/
/** Codage de Huffman: Compression **/
/************************************/
#ifndef HUFFCOMP_H_
#define HUFFCOMP_H_
#include "alloc.h"
#include "dequeue.h"
#include "hufftree.h"
#include <stdbool.h>
#include <stdio.h>
/************************************************/
/* Type utilisé pour stocker un code de Huffman */
/************************************************/
// Type pour représenter un seul code
typedef struct {
// Le nombre de bits dans le code (un code n'aura jamais plus de 256 bits).
unsigned char size;
// Le tableau qui stocke le code : les valeurs sont toutes 0 ou 1.
unsigned char *code;
} huffcode;
// Le dictionnaire contiendra tous les codes.
// Il sera de type huffcode **, et pointera vers 256 cases.
// Chacun de ses éléments sera donc de type huffcode *.
// Pour les valeurs i ayant un code, la ième case contient ce code
// Pour les valeurs i n'ayant pas de code (de fréquence nulle), la ième case
// contient NULL.
/********************************************/
/* Fonction de construction du dictionnaire */
/********************************************/
// Construction du dictionnaire à partir de l'arbre de Huffman.
huffcode **create_huffdict(huffnode *tree);
// Suppression du dictionnaire
void delete_huffdict(huffcode **dict);
/***********************************************/
/** Fonction pour la compression d'un fichier **/
/***********************************************/
// Écriture d'un unsigned int sur 4 octets dans un fichier.
// output doit être ouvert en écriture.
void write_size(FILE *output, unsigned int size);
// Insertion de tous les bits d'un code à droite d'un tuyau tampon.
// Le tuyau est supposé contenir une séquence de 0 et de 1.
void insert_code_in_buffer(dequeue *buffer, huffcode *code);
// Calcule l'octet correspondant aux 8 premiers bits à gauche d'un tuyau tampon.
// Le tuyau est supposé contenir une séquence de bits (0 ou 1) de longueur au
// moins 8 Les 8 bits lus doivent être supprimés du tuyau.
int buffer_to_byte(dequeue *buffer);
// Fonction de compression du fichier input dans output.
// input doit être ouvert en lecture.
// output doit être ouvert en écriture.
// Le fichier output devra contenir dans l'ordre :
// 1) La taille de input codée sur 4 octets
// 2) La sauvegarde de l'arbre de Huffman obtenu à partir de input.
// 3) Le codage de input.
void compress_file(FILE *input, FILE *output);
#endif