diff --git a/inc/display.h b/inc/display.h index d6b32b4..80ba5d1 100644 --- a/inc/display.h +++ b/inc/display.h @@ -3,7 +3,8 @@ #include -typedef struct HufTree HufTree; +typedef struct HufVertex HufVertex; +typedef HufVertex* HufTree; /** * Écrire des données de débogage sur la sortie d'erreurs standard diff --git a/src/display.c b/src/display.c index 3af889d..ecb25fb 100644 --- a/src/display.c +++ b/src/display.c @@ -8,23 +8,22 @@ #include /** - * Détermine la profondeur de l'arbre binaire - * à partir du sommet donné + * Détermine la profondeur maximale de l'arbre de Huffman donné */ -static int _maxDepth(HufVertex); +static int _treeDepth(HufTree); /** - * Affiche l'arborescence à partir du sommet donné, - * indenté sur le niveau donné + * Sous-fonction pour l'affichage récursif d'un arbre de Huffman */ -static void _printVertex(HufVertex, wchar_t*, int); +static void _subPrintTree(HufTree, wchar_t*, int); /** - * Transforme le caractère donné en espace s'il est - * non-imprimable, ou le laisse tel quel sinon + * Transforme le caractère donné en espace s'il est non-imprimable + * ou le laisse tel quel sinon */ static char _safeChar(char input); +// Drapeau pour l'affichage verbeux ou non-verbeux static int is_verbose = FALSE; void printVerbose(const char* format, ...) { @@ -48,13 +47,13 @@ int isVerbose() { 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)); - _printVertex(*tree.root, buffer, 0); + wchar_t* buffer = malloc(_treeDepth(tree) * 4 * sizeof(*buffer)); + _subPrintTree(tree, buffer, 0); free(buffer); } -void _printVertex(HufVertex vert, wchar_t* buffer, int length) { - if (vert.child_l != NULL && vert.child_r != NULL) { +void _subPrintTree(HufTree tree, wchar_t* buffer, int length) { + if (tree->child_l != NULL && tree->child_r != NULL) { // Affichage d'un sommet avec enfants, on montre // la probabilité somme des enfants printVerbose("■\n"); @@ -69,7 +68,7 @@ void _printVertex(HufVertex vert, wchar_t* buffer, int length) { buffer[length + 2] = ' '; buffer[length + 3] = ' '; buffer[length + 4] = '\0'; - _printVertex(*vert.child_l, buffer, length + 4); + _subPrintTree(tree->child_l, buffer, length + 4); // Affichage du fils droite. Augmentation du préfixe // pour l'affichage des enfants du fils droit @@ -77,18 +76,18 @@ void _printVertex(HufVertex vert, wchar_t* buffer, int length) { printVerbose("%ls└── ", buffer); buffer[length] = ' '; - _printVertex(*vert.child_r, buffer, length + 4); + _subPrintTree(tree->child_r, buffer, length + 4); } else { // Affichage d'une feuille de l'arbre, correspondant // à un caractère du corpus - printVerbose("%c\n", _safeChar(vert.name)); + printVerbose("%c\n", _safeChar(tree->name)); } } -int _maxDepth(HufVertex vert) { - if (vert.child_l != NULL && vert.child_r != NULL) { - int left = _maxDepth(*vert.child_l); - int right = _maxDepth(*vert.child_r); +int _treeDepth(HufTree tree) { + if (tree->child_l != NULL && tree->child_r != NULL) { + int left = _treeDepth(tree->child_l); + int right = _treeDepth(tree->child_r); return (left > right ? left : right) + 1; } else {