Correction de la position des étoiles de pointeurs
This commit is contained in:
parent
f7378d4707
commit
c0de61b95a
|
@ -9,7 +9,7 @@
|
|||
* Écrire sur la sortie standard à la manière de printf,
|
||||
* seulement si le mode verbeux est actif
|
||||
*/
|
||||
void printVerbose(const char *format, ...);
|
||||
void printVerbose(const char* format, ...);
|
||||
|
||||
/**
|
||||
* Active ou désactive l'affichage des messages verbeux
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
|
||||
#include "huftree.h"
|
||||
|
||||
void compress(const char *filepath);
|
||||
void compress(const char* filepath);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -21,7 +21,8 @@ struct HufVertex {
|
|||
// 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, *child_r;
|
||||
HufVertex* child_l;
|
||||
HufVertex* child_r;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -30,7 +31,7 @@ struct HufVertex {
|
|||
typedef struct HufTree HufTree;
|
||||
struct HufTree {
|
||||
// Pointeur sur la racine de l'arbre
|
||||
HufVertex *root;
|
||||
HufVertex* root;
|
||||
|
||||
// Quantité de sommets dans l'arbre
|
||||
size_t size;
|
||||
|
@ -42,7 +43,7 @@ struct HufTree {
|
|||
*
|
||||
* (résultat à libérer avec `freeTree`)
|
||||
*/
|
||||
HufTree createTree(double *frequencies);
|
||||
HufTree createTree(double* frequencies);
|
||||
|
||||
/**
|
||||
* Libérer la mémoire occupée par un arbre de Huffman
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
static int is_verbose = FALSE;
|
||||
|
||||
void printVerbose(const char *format, ...) {
|
||||
void printVerbose(const char* format, ...) {
|
||||
if (is_verbose) {
|
||||
va_list args_list;
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
*/
|
||||
static double* _createFrequencies(const char*);
|
||||
|
||||
double* _createFrequencies(const char *filepath) {
|
||||
double *frequencies = malloc(NUM_CHARS * sizeof(*frequencies));
|
||||
double* _createFrequencies(const char* filepath) {
|
||||
double* frequencies = malloc(NUM_CHARS * sizeof(*frequencies));
|
||||
int totalChars = 0;
|
||||
|
||||
for (size_t i = 0; i < NUM_CHARS; i++) {
|
||||
|
@ -25,7 +25,7 @@ double* _createFrequencies(const char *filepath) {
|
|||
// Ouverture du fichier en lecture seule, et comptage
|
||||
// des occurences de chaque caractère ASCII ainsi que
|
||||
// du nombre total de caractères
|
||||
FILE *file = fopen(filepath, "r");
|
||||
FILE* file = fopen(filepath, "r");
|
||||
|
||||
if (file == NULL) {
|
||||
fprintf(
|
||||
|
@ -53,9 +53,9 @@ double* _createFrequencies(const char *filepath) {
|
|||
return frequencies;
|
||||
}
|
||||
|
||||
void compress(const char *filepath) {
|
||||
void compress(const char* filepath) {
|
||||
printVerbose("Calcul des fréquences d'apparition de chaque caractère\n");
|
||||
double *frequencies = _createFrequencies(filepath);
|
||||
double* frequencies = _createFrequencies(filepath);
|
||||
|
||||
if (isVerbose()) {
|
||||
printFrequenciesTable(frequencies, NUM_CHARS);
|
||||
|
|
|
@ -25,12 +25,12 @@ static char _safeChar(char input);
|
|||
void printTree(HufTree tree) {
|
||||
// Allocation d'un tampon suffisamment grand pour contenir
|
||||
// les indentations des sommets les plus profonds de l'arbre
|
||||
wchar_t *buffer = malloc(_maxDepth(*tree.root) * 4 * sizeof(*buffer));
|
||||
wchar_t* buffer = malloc(_maxDepth(*tree.root) * 4 * sizeof(*buffer));
|
||||
_printVertex(*tree.root, buffer, 0);
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
void _printVertex(HufVertex vert, wchar_t *buffer, int length) {
|
||||
void _printVertex(HufVertex vert, wchar_t* buffer, int length) {
|
||||
if (vert.child_l != NULL && vert.child_r != NULL) {
|
||||
// Affichage d'un sommet avec enfants, on montre
|
||||
// la probabilité somme des enfants
|
||||
|
|
|
@ -44,7 +44,7 @@ HufTree createTree(double* frequencies) {
|
|||
// Allocation d'un tableau de `leaves_count` pointeurs vers sommets.
|
||||
// Initialement, ce tableau contient les feuilles du futur arbre.
|
||||
// Chaque feuille correspond à un caractère du corpus original
|
||||
HufVertex **remaining = malloc(leaves_count * sizeof(*remaining));
|
||||
HufVertex** remaining = malloc(leaves_count * sizeof(*remaining));
|
||||
size_t next_index = 0;
|
||||
|
||||
for (size_t i = 0; i < NUM_CHARS; i++) {
|
||||
|
@ -77,11 +77,11 @@ HufTree createTree(double* frequencies) {
|
|||
&min_vert_index, &sec_min_vert_index
|
||||
);
|
||||
|
||||
HufVertex *min_vert = remaining[min_vert_index];
|
||||
HufVertex *sec_min_vert = remaining[sec_min_vert_index];
|
||||
HufVertex* min_vert = remaining[min_vert_index];
|
||||
HufVertex* sec_min_vert = remaining[sec_min_vert_index];
|
||||
|
||||
// Création d'un sommet parent P pour A et B
|
||||
HufVertex *parent = malloc(sizeof(*parent));
|
||||
HufVertex* parent = malloc(sizeof(*parent));
|
||||
|
||||
parent->frequency = min_vert->frequency + sec_min_vert->frequency;
|
||||
parent->child_l = min_vert;
|
||||
|
@ -110,8 +110,8 @@ HufTree createTree(double* frequencies) {
|
|||
}
|
||||
|
||||
void _findMinimalVertices(
|
||||
HufVertex **vertices, size_t size,
|
||||
size_t *min_index, size_t *sec_min_index
|
||||
HufVertex** vertices, size_t size,
|
||||
size_t* min_index, size_t* sec_min_index
|
||||
) {
|
||||
// Initialisation de telle sorte qu'initialement
|
||||
// on ait `freq(min_index) < freq(sec_min_index)`
|
||||
|
@ -144,7 +144,7 @@ void freeTree(HufTree tree) {
|
|||
tree.root = NULL;
|
||||
}
|
||||
|
||||
void _freeTreeVertex(HufVertex *vert) {
|
||||
void _freeTreeVertex(HufVertex* vert) {
|
||||
if (vert->child_l != NULL && vert->child_r != NULL) {
|
||||
_freeTreeVertex(vert->child_l);
|
||||
_freeTreeVertex(vert->child_r);
|
||||
|
|
|
@ -24,15 +24,15 @@ static struct argp_option options[] = {
|
|||
*/
|
||||
typedef struct Args {
|
||||
int verbose;
|
||||
char **files;
|
||||
char** files;
|
||||
} Args;
|
||||
|
||||
/**
|
||||
* Fonction de rappel pour interpréter les arguments
|
||||
* passés au programme
|
||||
*/
|
||||
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||
Args *args = state->input;
|
||||
static error_t parse_opt(int key, char* arg, struct argp_state* state) {
|
||||
Args* args = state->input;
|
||||
|
||||
switch (key) {
|
||||
case 'V':
|
||||
|
|
Loading…
Reference in New Issue