Correction de la position des étoiles de pointeurs

This commit is contained in:
Mattéo Delabre 2016-10-22 10:56:13 +02:00
parent f7378d4707
commit c0de61b95a
8 changed files with 24 additions and 23 deletions

View File

@ -9,7 +9,7 @@
* Écrire sur la sortie standard à la manière de printf, * Écrire sur la sortie standard à la manière de printf,
* seulement si le mode verbeux est actif * 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 * Active ou désactive l'affichage des messages verbeux

View File

@ -3,6 +3,6 @@
#include "huftree.h" #include "huftree.h"
void compress(const char *filepath); void compress(const char* filepath);
#endif #endif

View File

@ -21,7 +21,8 @@ struct HufVertex {
// Pointeurs vers les deux enfants de ce sommet. Ils valent tous // Pointeurs vers les deux enfants de ce sommet. Ils valent tous
// deux NULL si le sommet est une feuille. À noter qu'un sommet // 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 // 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; typedef struct HufTree HufTree;
struct HufTree { struct HufTree {
// Pointeur sur la racine de l'arbre // Pointeur sur la racine de l'arbre
HufVertex *root; HufVertex* root;
// Quantité de sommets dans l'arbre // Quantité de sommets dans l'arbre
size_t size; size_t size;
@ -42,7 +43,7 @@ struct HufTree {
* *
* (résultat à libérer avec `freeTree`) * (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 * Libérer la mémoire occupée par un arbre de Huffman

View File

@ -4,7 +4,7 @@
static int is_verbose = FALSE; static int is_verbose = FALSE;
void printVerbose(const char *format, ...) { void printVerbose(const char* format, ...) {
if (is_verbose) { if (is_verbose) {
va_list args_list; va_list args_list;

View File

@ -14,8 +14,8 @@
*/ */
static double* _createFrequencies(const char*); static double* _createFrequencies(const char*);
double* _createFrequencies(const char *filepath) { double* _createFrequencies(const char* filepath) {
double *frequencies = malloc(NUM_CHARS * sizeof(*frequencies)); double* frequencies = malloc(NUM_CHARS * sizeof(*frequencies));
int totalChars = 0; int totalChars = 0;
for (size_t i = 0; i < NUM_CHARS; i++) { 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 // Ouverture du fichier en lecture seule, et comptage
// des occurences de chaque caractère ASCII ainsi que // des occurences de chaque caractère ASCII ainsi que
// du nombre total de caractères // du nombre total de caractères
FILE *file = fopen(filepath, "r"); FILE* file = fopen(filepath, "r");
if (file == NULL) { if (file == NULL) {
fprintf( fprintf(
@ -53,9 +53,9 @@ double* _createFrequencies(const char *filepath) {
return frequencies; return frequencies;
} }
void compress(const char *filepath) { void compress(const char* filepath) {
printVerbose("Calcul des fréquences d'apparition de chaque caractère\n"); printVerbose("Calcul des fréquences d'apparition de chaque caractère\n");
double *frequencies = _createFrequencies(filepath); double* frequencies = _createFrequencies(filepath);
if (isVerbose()) { if (isVerbose()) {
printFrequenciesTable(frequencies, NUM_CHARS); printFrequenciesTable(frequencies, NUM_CHARS);

View File

@ -25,12 +25,12 @@ static char _safeChar(char input);
void printTree(HufTree tree) { void printTree(HufTree tree) {
// Allocation d'un tampon suffisamment grand pour contenir // Allocation d'un tampon suffisamment grand pour contenir
// les indentations des sommets les plus profonds de l'arbre // 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); _printVertex(*tree.root, buffer, 0);
free(buffer); 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) { if (vert.child_l != NULL && vert.child_r != NULL) {
// Affichage d'un sommet avec enfants, on montre // Affichage d'un sommet avec enfants, on montre
// la probabilité somme des enfants // la probabilité somme des enfants

View File

@ -44,7 +44,7 @@ HufTree createTree(double* frequencies) {
// Allocation d'un tableau de `leaves_count` pointeurs vers sommets. // Allocation d'un tableau de `leaves_count` pointeurs vers sommets.
// Initialement, ce tableau contient les feuilles du futur arbre. // Initialement, ce tableau contient les feuilles du futur arbre.
// Chaque feuille correspond à un caractère du corpus original // 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; size_t next_index = 0;
for (size_t i = 0; i < NUM_CHARS; i++) { for (size_t i = 0; i < NUM_CHARS; i++) {
@ -77,11 +77,11 @@ HufTree createTree(double* frequencies) {
&min_vert_index, &sec_min_vert_index &min_vert_index, &sec_min_vert_index
); );
HufVertex *min_vert = remaining[min_vert_index]; HufVertex* min_vert = remaining[min_vert_index];
HufVertex *sec_min_vert = remaining[sec_min_vert_index]; HufVertex* sec_min_vert = remaining[sec_min_vert_index];
// Création d'un sommet parent P pour A et B // 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->frequency = min_vert->frequency + sec_min_vert->frequency;
parent->child_l = min_vert; parent->child_l = min_vert;
@ -110,8 +110,8 @@ HufTree createTree(double* frequencies) {
} }
void _findMinimalVertices( void _findMinimalVertices(
HufVertex **vertices, size_t size, HufVertex** vertices, size_t size,
size_t *min_index, size_t *sec_min_index size_t* min_index, size_t* sec_min_index
) { ) {
// Initialisation de telle sorte qu'initialement // Initialisation de telle sorte qu'initialement
// on ait `freq(min_index) < freq(sec_min_index)` // on ait `freq(min_index) < freq(sec_min_index)`
@ -144,7 +144,7 @@ void freeTree(HufTree tree) {
tree.root = NULL; tree.root = NULL;
} }
void _freeTreeVertex(HufVertex *vert) { void _freeTreeVertex(HufVertex* vert) {
if (vert->child_l != NULL && vert->child_r != NULL) { if (vert->child_l != NULL && vert->child_r != NULL) {
_freeTreeVertex(vert->child_l); _freeTreeVertex(vert->child_l);
_freeTreeVertex(vert->child_r); _freeTreeVertex(vert->child_r);

View File

@ -24,15 +24,15 @@ static struct argp_option options[] = {
*/ */
typedef struct Args { typedef struct Args {
int verbose; int verbose;
char **files; char** files;
} Args; } Args;
/** /**
* Fonction de rappel pour interpréter les arguments * Fonction de rappel pour interpréter les arguments
* passés au programme * passés au programme
*/ */
static error_t parse_opt(int key, char *arg, struct argp_state *state) { static error_t parse_opt(int key, char* arg, struct argp_state* state) {
Args *args = state->input; Args* args = state->input;
switch (key) { switch (key) {
case 'V': case 'V':