Gère les textes d'entrée n'ayant qu'un seul type de caractère

This commit is contained in:
Mattéo Delabre 2016-11-20 16:30:23 +01:00
parent e915bd3080
commit 5af178a01d
1 changed files with 21 additions and 1 deletions

View File

@ -101,6 +101,24 @@ HufTree createTree(bytecount* counts) {
// Cas particulier : aucun caractère dans le fichier, dans ce // Cas particulier : aucun caractère dans le fichier, dans ce
// cas l'arbre est l'arbre vide // cas l'arbre est l'arbre vide
tree = NULL; tree = NULL;
} else if (leaves_count == 1) {
// Cas particulier : un seul type de caractère dans le fichier,
// dans ce cas on crée un noeud artificiel et une racine. Sans
// cette opération, on aurait un arbre avec un unique sommet et
// donc une étiquette vide
HufTree child_l = remaining[0];
HufTree child_r = malloc(sizeof(*child_r));
tree = malloc(sizeof(*tree));
tree->value = -1;
tree->count = -1;
tree->child_l = child_l;
tree->child_r = child_r;
child_r->value = -1;
child_r->count = -1;
child_r->child_l = NULL;
child_r->child_r = NULL;
} else { } else {
// Sinon, la racine de l'arbre est le dernier sommet encore // Sinon, la racine de l'arbre est le dernier sommet encore
// dans le tableau `remaining` // dans le tableau `remaining`
@ -245,8 +263,10 @@ void _labelVertex(HufVertex vertex, char** labels, char* label, size_t length) {
} else { } else {
// Si le sommet est une feuille, étiquetage du caractère // Si le sommet est une feuille, étiquetage du caractère
// associé avec l'étiquette passée en paramètre. Fin de la récursion // associé avec l'étiquette passée en paramètre. Fin de la récursion
if (vertex.value != -1) {
labels[vertex.value] = label; labels[vertex.value] = label;
} }
}
} }
char* _appendToString(char* orig, size_t length, char append) { char* _appendToString(char* orig, size_t length, char append) {