Ajout de la documentation Doxygen
This commit is contained in:
		
							parent
							
								
									a7c9148d5c
								
							
						
					
					
						commit
						67542a87c2
					
				|  | @ -0,0 +1,9 @@ | |||
| DOXYFILE_ENCODING      = UTF-8 | ||||
| PROJECT_NAME           = Huffman | ||||
| PROJECT_NUMBER         = 0.1 | ||||
| PROJECT_BRIEF          = "Compresseur Huffman en C, dans le cadre du projet HLIN303" | ||||
| 
 | ||||
| OUTPUT_DIRECTORY       = "./out/doxygen" | ||||
| RECURSIVE              = YES | ||||
| OUTPUT_LANGUAGE        = French | ||||
| OPTIMIZE_OUTPUT_FOR_C  = YES | ||||
							
								
								
									
										123
									
								
								inc/buffer.h
								
								
								
								
							
							
						
						
									
										123
									
								
								inc/buffer.h
								
								
								
								
							|  | @ -1,5 +1,14 @@ | |||
| #ifndef __IN303_BUFFER_H__ | ||||
| #define __IN303_BUFFER_H__ | ||||
| /**
 | ||||
|  * @file | ||||
|  * @brief Abstraction de l'écriture et la lecture d'un fichier bit à bit. | ||||
|  * | ||||
|  * Définir des structures et des fonctions de manipulation liées à | ||||
|  * un fichier et permettant d'accéder à son contenu ou de le modifier | ||||
|  * bit par bit au lieu d'octet par octet. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __HUFFMAN_BUFFER_H_INCLUDED__ | ||||
| #define __HUFFMAN_BUFFER_H_INCLUDED__ | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| #include <stdint.h> | ||||
|  | @ -7,78 +16,114 @@ | |||
| #include "common.h" | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Tampon d'écriture bit par bit. | ||||
|  * | ||||
|  * Tampon permettant d'abstraire l'écriture dans un fichier bit par | ||||
|  * bit au lieu d'octet par octet. Les bits sont vidés dans le fichier | ||||
|  * dès qu'un octet est complet | ||||
|  * dès qu'un octet est complet, ou lorsque le vidage est forcé. | ||||
|  */ | ||||
| typedef struct WriteBuffer WriteBuffer; | ||||
| struct WriteBuffer { | ||||
|     // Contient les données du tampon d'écriture, c'est-à-dire
 | ||||
|     // les données en attente de vidage dans le fichier
 | ||||
| typedef struct WriteBuffer { | ||||
|     /**
 | ||||
|      * Données du tampon d'écriture en attente de vidage. | ||||
|      */ | ||||
|     int data; | ||||
| 
 | ||||
|     // Nombre de bits utilisés dans `data`. Si ce nombre vaut 8,
 | ||||
|     // le tampon d'écriture est plein
 | ||||
|     /**
 | ||||
|      * Nombre de bits utilisés dans WriteBuffer#data. | ||||
|      */ | ||||
|     size_t pending_bits; | ||||
| 
 | ||||
|     // Nombre d'octets écrits par le tampon d'écriture dans le
 | ||||
|     // fichier, correspondant au nombre de vidages du tampon
 | ||||
|     /**
 | ||||
|      * Nombre de vidages effectués par le tampon. | ||||
|      */ | ||||
|     bytecount flushed_count; | ||||
| 
 | ||||
|     // Fichier dans lequel le tampon d'éciture est vidé à l'appel
 | ||||
|     // de `flushBuffer` ou au débordement
 | ||||
|     /**
 | ||||
|      * Fichier dans lequel le tampon est vidé. | ||||
|      */ | ||||
|     FILE* dest_file; | ||||
| }; | ||||
| } WriteBuffer; | ||||
| 
 | ||||
| /**
 | ||||
|  * Initialise un tampon d'écriture vide, avec le fichier donné comme | ||||
|  * destination | ||||
|  * @brief Initialiser un tampon d'écriture. | ||||
|  * | ||||
|  * Initialiser un tampon vide avec le fichier @p dest pour destination. | ||||
|  * @param dest Fichier de destination. | ||||
|  * @return Tampon créé. | ||||
|  */ | ||||
| WriteBuffer createWriteBuffer(FILE*); | ||||
| WriteBuffer createWriteBuffer(FILE* dest); | ||||
| 
 | ||||
| /**
 | ||||
|  * Écrit le bit donné dans le tampon d'écriture | ||||
|  * @brief Écrire un bit dans le tampon d'écriture. | ||||
|  * | ||||
|  * Ajouter le bit @p bit aux données du tampon @p buffer. Si le tampon est | ||||
|  * plein, vidage dans le fichier associé. | ||||
|  * @param bit Bit à ajouter au tampon (0 ou 1). | ||||
|  * @param buffer Tampon dans lequel ajouter le bit. | ||||
|  */ | ||||
| void putBuffer(char bit, WriteBuffer*); | ||||
| void putBuffer(char bit, WriteBuffer* buffer); | ||||
| 
 | ||||
| /**
 | ||||
|  * Force le vidage du tampon dans son fichier et sa réinitialisation | ||||
|  * (les bits non-remplis seront remplacés par des 0) | ||||
|  * @brief Forcer le vidage du tampon d'écriture. | ||||
|  * | ||||
|  * Forcer le vidage du tampon dans son fichier et sa réinitialisation. | ||||
|  * Si le tampon est vide, pas de vidage (pas d'octet superflu écrit). | ||||
|  * Si le tampon n'est pas rempli, complétion à droite par des 0. | ||||
|  * @param buffer Tampon à vider. | ||||
|  */ | ||||
| void flushBuffer(WriteBuffer*); | ||||
| void flushBuffer(WriteBuffer* buffer); | ||||
| 
 | ||||
| /**
 | ||||
|  * 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 | ||||
|  * @brief Récupèrer le nombre de vidages effectués par ce tampon. | ||||
|  * | ||||
|  * Permet de savoir combien d'octets ont été écrits dans le fichier | ||||
|  * par le tampon @p buffer. | ||||
|  * @param buffer Tampon à vérifier. | ||||
|  * @return Nombre de vidages effectués. | ||||
|  */ | ||||
| bytecount getFlushedCount(WriteBuffer*); | ||||
| bytecount getFlushedCount(WriteBuffer* buffer); | ||||
| 
 | ||||
| /**
 | ||||
|  * Tampon permettant d'abstraire le lecture depuis un fichier bit par | ||||
|  * @brief Tampon de lecture bit par bit. | ||||
|  * | ||||
|  * Tampon permettant d'abstraire la lecture d'un fichier bit par | ||||
|  * bit au lieu d'octet par octet. Un octet est lu depuis le fichier | ||||
|  * dès que tous les bits du précédent ont été lus | ||||
|  * seulement lorsque tous les bits du précédent octet ont été consommés. | ||||
|  */ | ||||
| typedef struct ReadBuffer ReadBuffer; | ||||
| struct ReadBuffer { | ||||
|     // Contient les données du tampon de lecture, c'est-à-dire
 | ||||
|     // le dernier octet lu depuis le fichier
 | ||||
| typedef struct ReadBuffer { | ||||
|     /**
 | ||||
|      * Données du tampon de lecture en attente de lecture. | ||||
|      */ | ||||
|     int data; | ||||
| 
 | ||||
|     // Numéro du prochain bit de `data` qui sera lu par `getBuffer`
 | ||||
|     /**
 | ||||
|      * Numéro du prochain bit de ReadBuffer#data à lire. | ||||
|      */ | ||||
|     size_t next_bit; | ||||
| 
 | ||||
|     // Fichier depuis lequel le tampon de lecture est rempli
 | ||||
|     /**
 | ||||
|      * Fichier depuis lequel les données sont lues. | ||||
|      */ | ||||
|     FILE* source_file; | ||||
| }; | ||||
| } ReadBuffer; | ||||
| 
 | ||||
| /**
 | ||||
|  * Initialise un tampon de lecture avec le fichier donné comme source | ||||
|  * @brief Initialiser un tampon de lecture. | ||||
|  * | ||||
|  * Initialiser un tampon vide avec le fichier @p source comme source. | ||||
|  * @param source Fichier source. | ||||
|  * @return Tampon créé. | ||||
|  */ | ||||
| ReadBuffer createReadBuffer(FILE*); | ||||
| ReadBuffer createReadBuffer(FILE* source); | ||||
| 
 | ||||
| /**
 | ||||
|  * Lit le prochain bit depuis le tampon de lecture | ||||
|  * @brief Lire un bit depuis le tampon de lecture. | ||||
|  * | ||||
|  * Lire le prochain bit depuis le tampon de lecture, et lire un octet | ||||
|  * depuis la source si besoin est. | ||||
|  * @param buffer Tampon depuis lequel lire un bit. | ||||
|  * @return Valeur du bit qui est lu : 0 ou 1. | ||||
|  */ | ||||
| char getBuffer(ReadBuffer*); | ||||
| char getBuffer(ReadBuffer* buffer); | ||||
| 
 | ||||
| #endif | ||||
| #endif // __HUFFMAN_BUFFER_H_INCLUDED__
 | ||||
|  |  | |||
							
								
								
									
										26
									
								
								inc/common.h
								
								
								
								
							
							
						
						
									
										26
									
								
								inc/common.h
								
								
								
								
							|  | @ -1,10 +1,30 @@ | |||
| #ifndef __IN303_COMMON_H__ | ||||
| #define __IN303_COMMON_H__ | ||||
| /**
 | ||||
|  * @file | ||||
|  * @brief Définitions communes pour le reste du code. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __HUFFMAN_COMMON_H_INCLUDED__ | ||||
| #define __HUFFMAN_COMMON_H_INCLUDED__ | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Macro correspondant à la valeur booléenne vraie (1). | ||||
|  */ | ||||
| #define TRUE 1 | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Macro correspondant à la valeur booléenne fausse (0). | ||||
|  */ | ||||
| #define FALSE 0 | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Macro correspondant au nombre de caractères possibles. | ||||
|  */ | ||||
| #define NUM_CHARS 256 | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Alias du type d'entier non-signé 64 bits pour compter | ||||
|  * les longueurs de fichiers. | ||||
|  */ | ||||
| typedef long long unsigned int bytecount; | ||||
| 
 | ||||
| #endif | ||||
| #endif // __HUFFMAN_COMMON_H_INCLUDED__
 | ||||
|  |  | |||
|  | @ -1,8 +1,22 @@ | |||
| #ifndef __IN303_COMPRESS_H__ | ||||
| #define __IN303_COMPRESS_H__ | ||||
| /**
 | ||||
|  * @file | ||||
|  * @brief Compression des fichiers. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __HUFFMAN_COMPRESS_H_INCLUDED__ | ||||
| #define __HUFFMAN_COMPRESS_H_INCLUDED__ | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Compresser le fichier @p source vers @p dest. | ||||
|  * | ||||
|  * Lit les caractères de @p source, applique l'algorithme de Huffman pour | ||||
|  * déterminer une représentation compacte et la stocke dans @p dest. | ||||
|  * @param source Fichier ouvert en lecture depuis lequel lire les données. | ||||
|  * @param dest Fichier ouvert en écriture dans lequel écrire les données | ||||
|  * compressées. | ||||
|  */ | ||||
| void compress(FILE* source, FILE* dest); | ||||
| 
 | ||||
| #endif | ||||
| #endif // __HUFFMAN_COMPRESS_H_INCLUDED__
 | ||||
|  |  | |||
|  | @ -1,8 +1,22 @@ | |||
| #ifndef __IN303_DECOMPRESS_H__ | ||||
| #define __IN303_DECOMPRESS_H__ | ||||
| /**
 | ||||
|  * @file | ||||
|  * @brief Décompression des fichiers. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __HUFFMAN_DECOMPRESS_H_INCLUDED__ | ||||
| #define __HUFFMAN_DECOMPRESS_H_INCLUDED__ | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Décompresser le fichier @p source vers @p dest. | ||||
| 
 | ||||
|  * Lit le fichier @p source ayant été compressé avec l'algorithme de Huffman | ||||
|  * et écrit les données décompressées dans @p dest. | ||||
|  * @param source Fichier ouvert en lecture depuis lequel lire les données. | ||||
|  * @param dest Fichier ouvert en écriture dans lequel écrire les données | ||||
|  * décompressées. | ||||
|  */ | ||||
| void decompress(FILE* source, FILE* dest); | ||||
| 
 | ||||
| #endif | ||||
| #endif // __HUFFMAN_DECOMPRESS_H_INCLUDED__
 | ||||
|  |  | |||
|  | @ -1,45 +1,69 @@ | |||
| #ifndef __IN303_DISPLAY_H__ | ||||
| #define __IN303_DISPLAY_H__ | ||||
| /**
 | ||||
|  * @file | ||||
|  * @brief Gestion de l'affichage. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __HUFFMAN_DISPLAY_H_INCLUDED__ | ||||
| #define __HUFFMAN_DISPLAY_H_INCLUDED__ | ||||
| 
 | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| #include "common.h" | ||||
| 
 | ||||
| //! \{
 | ||||
| typedef struct HufVertex HufVertex; | ||||
| typedef HufVertex* HufTree; | ||||
| //! \}
 | ||||
| 
 | ||||
| /**
 | ||||
|  * Écrire des données de débogage sur la sortie d'erreurs standard | ||||
|  * (seulement si le mode verbeux est actif) | ||||
|  * @brief Écrire un message de débogage sur la sortie d'erreurs. | ||||
|  * | ||||
|  * Cette fonction n'a aucun effet si l'affichage des messages de débogage | ||||
|  * ne sont pas activés, sinon le message est affiché dans @c stderr. | ||||
|  * @param format Format d'affichage à la printf. | ||||
|  * @param ... Variables pour l'affichage. | ||||
|  */ | ||||
| void printVerbose(const char* format, ...); | ||||
| 
 | ||||
| /**
 | ||||
|  * Active ou désactive l'affichage des messages de débogage (mode verbeux) | ||||
|  * sur la sortie d'erreurs standard | ||||
|  * @brief Activer ou désactiver l'affichage des messages de débogage. | ||||
|  * | ||||
|  * Si le paramètre est vrai, les appels suivants à @c printVerbose seront | ||||
|  * affichés sur la sortie d'erreurs. Sinon, ils n'auront aucun effet. | ||||
|  * @param enable Activer ou désactiver l'affichage. | ||||
|  */ | ||||
| void setVerbose(int); | ||||
| void setVerbose(int enable); | ||||
| 
 | ||||
| /**
 | ||||
|  * Renvoie l'état du mode verbeux | ||||
|  * @brief Vérifie si les messages de débogage sont activés ou non. | ||||
|  */ | ||||
| int isVerbose(); | ||||
| 
 | ||||
| /**
 | ||||
|  * Afficher sur la sortie standard l'arbre passé en paramètre | ||||
|  * @brief Afficher sur la sortie d'erreurs une représentation de l'arbre | ||||
|  * passé en paramètre. | ||||
|  * | ||||
|  * @param tree L'arbre à afficher. | ||||
|  */ | ||||
| void printTree(HufTree tree); | ||||
| 
 | ||||
| /**
 | ||||
|  * Afficher sur la sortie standard le tableau associant les caractères | ||||
|  * à leur effectif d'apparition passé en argument | ||||
|  * @brief Afficher sur la sortie d'erreurs le tableau associant les caractères | ||||
|  * à leur effectif d'apparition passé en argument. | ||||
|  * | ||||
|  * @param counts Tableau d'association des effectifs. | ||||
|  * @param total Nombre total de caractères. | ||||
|  * @param size Taille du tableau @p counts. | ||||
|  */ | ||||
| void printCountsTable(bytecount*, bytecount total, size_t); | ||||
| void printCountsTable(bytecount* counts, bytecount total, size_t size); | ||||
| 
 | ||||
| /**
 | ||||
|  * Afficher sur la sortie standard le tableau associant les caractères | ||||
|  * à leur étiquette passé en argument | ||||
|  * *@brief Afficher sur la sortie d'erreurs le tableau associant les caractères | ||||
|  * à leur étiquette passé en argument. | ||||
|  * | ||||
|  * @param labels Tableau d'association des étiquettes. | ||||
|  * @param size Taille du tableau @p labels. | ||||
|  */ | ||||
| void printLabelsTable(char**, size_t); | ||||
| void printLabelsTable(char** labels, size_t size); | ||||
| 
 | ||||
| #endif | ||||
| #endif // __HUFFMAN_DISPLAY_H_INCLUDED__
 | ||||
|  |  | |||
							
								
								
									
										113
									
								
								inc/huftree.h
								
								
								
								
							
							
						
						
									
										113
									
								
								inc/huftree.h
								
								
								
								
							|  | @ -1,76 +1,117 @@ | |||
| #ifndef __IN303_HUFTREE_H__ | ||||
| #define __IN303_HUFTREE_H__ | ||||
| /**
 | ||||
|  * @file | ||||
|  * @brief Représentation mémoire des arbres binaires de Huffman. | ||||
|  * | ||||
|  * Définir une structure permettant de représenter en mémoire les | ||||
|  * arbres binaires de Huffman et des fonctions permettant de manipuler | ||||
|  * ces arbres. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __HUFFMAN_HUFTREE_H_INCLUDED__ | ||||
| #define __HUFFMAN_HUFTREE_H_INCLUDED__ | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| #include "common.h" | ||||
| 
 | ||||
| //! \{
 | ||||
| typedef struct WriteBuffer WriteBuffer; | ||||
| typedef struct ReadBuffer ReadBuffer; | ||||
| //! \}
 | ||||
| 
 | ||||
| /**
 | ||||
|  * Représente un des sommets d'un arbre de Huffman (représente l'arbre | ||||
|  * en entier s'il s'agit de la racine) | ||||
|  * @brief Sommet d'un arbre binaire de Huffman. | ||||
|  * | ||||
|  * Sommet possédant éventuellement une valeur (caractère associé), | ||||
|  * un effectif d'apparition (nombre d'occurences du caractère dans la source) | ||||
|  * et un sommet enfant à gauche et/ou à droite. | ||||
|  */ | ||||
| typedef struct HufVertex HufVertex; | ||||
| typedef HufVertex* HufTree; | ||||
| struct HufVertex { | ||||
|     // Caractère associé à ce sommet ou -1 s'il n'y a aucun caractère
 | ||||
|     // associé (notamment s'il s'agit d'une branche)
 | ||||
| typedef struct HufVertex { | ||||
|     /**
 | ||||
|      * Caractère associé au sommet, ou -1 si aucun caractère | ||||
|      * n'est associé (par exemple pour les sommets internes). | ||||
|      */ | ||||
|     unsigned int value; | ||||
| 
 | ||||
|     // Indique l'effectif du caractère associée à ce sommet
 | ||||
|     // dans le fichier source, ou -1 s'il n'y a aucun caractère associé
 | ||||
|     /**
 | ||||
|      * Effectif du caractère associé au sommet, ou -1 si aucun | ||||
|      * caractère n'est associé. | ||||
|      */ | ||||
|     bytecount count; | ||||
| 
 | ||||
|     // Pointeurs vers les deux enfants de ce sommet. Ils valent tous
 | ||||
|     // deux NULL si le sommet est une feuille. À noter qu'un sommet
 | ||||
|     // a toujours 0 ou 2 enfants car un arbre de Huffman est binaire
 | ||||
|     HufVertex* child_l; | ||||
|     HufVertex* child_r; | ||||
| }; | ||||
|     /**
 | ||||
|      * Sommet enfant à gauche, ou NULL si ce sommet n'a pas d'enfant | ||||
|      * à gauche. | ||||
|      */ | ||||
|     struct HufVertex* child_l; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Sommet enfant à droite, ou NULL si ce sommet n'a pas d'enfant | ||||
|      * à droite. | ||||
|      */ | ||||
|     struct HufVertex* child_r; | ||||
| } HufVertex; | ||||
| 
 | ||||
| /**
 | ||||
|  * Construire un arbre de Huffman basé sur les effectifs | ||||
|  * de caractères passés dans `counts` | ||||
|  * @brief Arbre binaire de Huffman (pointeur vers un @c HufVertex) | ||||
|  */ | ||||
| typedef HufVertex* HufTree; | ||||
| 
 | ||||
| /**
 | ||||
|  * @brief Construire un arbre de Huffman. | ||||
|  * | ||||
|  * (résultat à libérer avec `freeTree`) | ||||
|  * Lire les effectifs de caractères dans @p counts et en déduire | ||||
|  * un arbre binaire de Huffman. Le résultat doit être libéré avec | ||||
|  * la fonction @c freeTree. | ||||
|  * @param counts Comptes des caractères. | ||||
|  * @return Arbre construit. | ||||
|  */ | ||||
| HufTree createTree(bytecount* counts); | ||||
| 
 | ||||
| /**
 | ||||
|  * Écrit une représentation binaire de l'arbre dans le | ||||
|  * tampon passé en paramètre | ||||
|  * @brief Écrire un arbre dans le tampon d'écriture donné. | ||||
|  * | ||||
|  * Écrire une représentation binaire de l'arbre @p tree | ||||
|  * dans le tampon @p buffer. | ||||
|  * @param tree Arbre à représenter. | ||||
|  * @param buffer Tampon cible. | ||||
|  */ | ||||
| void writeTree(HufTree, WriteBuffer*); | ||||
| void writeTree(HufTree tree, WriteBuffer* buffer); | ||||
| 
 | ||||
| /**
 | ||||
|  * Reconstruit un arbre de Huffman à partir du fichier passé | ||||
|  * en paramètre | ||||
|  * @brief Lire un arbre depuis le tampon de lecture donné. | ||||
|  * | ||||
|  * Reconstruire un arbre de Huffman à partir du tampon de lecture | ||||
|  * @p buffer. Le résultat doit être libéré avec la fonction @c freeTree. | ||||
|  * @return L'arbre reconstruit. | ||||
|  */ | ||||
| HufTree readTree(ReadBuffer*); | ||||
| HufTree readTree(ReadBuffer* buffer); | ||||
| 
 | ||||
| /**
 | ||||
|  * Libérer la mémoire occupée par un arbre de Huffman | ||||
|  * généré par la fonction `createTree` | ||||
|  * @brief Libérer la mémoire occupée par un arbre. | ||||
|  * @param tree Arbre à libérer. | ||||
|  */ | ||||
| void freeTree(HufTree tree); | ||||
| 
 | ||||
| /**
 | ||||
|  * Associer à chaque feuille de l'arbre une étiquette unique basée | ||||
|  * sur sa position dans l'arbre. Aucune étiquette n'est ainsi préfixe | ||||
|  * d'une autre. Le tableau renvoyé associe chaque caractère ASCII | ||||
|  * à son préfixe, ou à NULL s'il n'est pas présent dans l'arbre | ||||
|  * @brief Créer la clé de codage à partir d'un arbre de Huffman. | ||||
|  * | ||||
|  * (résultat à libérer avec `freeTreeLabels`) | ||||
|  * Associer à chaque feuille de l'arbre une étiquette unique basée sur | ||||
|  * sa position dans l'arbre. Aucune étiquette n'est ainsi préfixe d'une | ||||
|  * autre. Le tableau renvoyé associe chaque caractère ASCII à son préfixe | ||||
|  * ou à NULL s'il n'est pas présent dans l'arbre. Le résultat doit être | ||||
|  * libéré avec @c freeTreeLabels. | ||||
|  * | ||||
|  * @param tree Arbre source de la clé de codage. | ||||
|  * @return Clé générée. | ||||
|  */ | ||||
| char** createTreeLabels(HufTree tree); | ||||
| 
 | ||||
| /**
 | ||||
|  * Libérer la mémoire occupée par un tableau d'étiquettes renvoyé | ||||
|  * par la fonction `labelTree` | ||||
|  * @brief Libérer la mémoire occupée par une clé de codage. | ||||
|  * @param labels Clé à libérer. | ||||
|  */ | ||||
| void freeTreeLabels(char** labels); | ||||
| 
 | ||||
| #endif | ||||
| #endif // __HUFFMAN_HUFTREE_H_INCLUDED__
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue