/**
 * @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;
//! \}

/**
 * @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, ...);

/**
 * @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 enable);

/**
 * @brief Vérifie si les messages de débogage sont activés ou non.
 */
int isVerbose();

/**
 * @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);

/**
 * @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* counts, bytecount total, size_t size);

/**
 * *@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** labels, size_t size);

#endif // __HUFFMAN_DISPLAY_H_INCLUDED__
