Correction des indentations (tabulations -> espaces)
This commit is contained in:
		
							parent
							
								
									16e6a0c5ca
								
							
						
					
					
						commit
						f7378d4707
					
				|  | @ -8,20 +8,20 @@ | |||
|  */ | ||||
| typedef struct HufVertex HufVertex; | ||||
| struct HufVertex { | ||||
| 	// Indique la fréquence d'apparition de la lettre du sommet
 | ||||
| 	// dans le corpus original, ou bien la somme des fréquences
 | ||||
| 	// de ses enfants (si ce n'est pas une feuille)
 | ||||
| 	double frequency; | ||||
|     // Indique la fréquence d'apparition de la lettre du sommet
 | ||||
|     // dans le corpus original, ou bien la somme des fréquences
 | ||||
|     // de ses enfants (si ce n'est pas une feuille)
 | ||||
|     double frequency; | ||||
| 
 | ||||
| 	// Caractère du corpus original associé à ce sommet. Uniquement
 | ||||
| 	// valable pour les feuilles. Pour les autres sommets, la valeur
 | ||||
| 	// de (character) n'est pas garantie
 | ||||
| 	char character; | ||||
|     // Caractère du corpus original associé à ce sommet. Uniquement
 | ||||
|     // valable pour les feuilles. Pour les autres sommets, la valeur
 | ||||
|     // de (character) n'est pas garantie
 | ||||
|     char character; | ||||
| 
 | ||||
| 	// 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; | ||||
|     // 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; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  | @ -29,11 +29,11 @@ struct HufVertex { | |||
|  */ | ||||
| typedef struct HufTree HufTree; | ||||
| struct HufTree { | ||||
| 	// Pointeur sur la racine de l'arbre
 | ||||
| 	HufVertex *root; | ||||
|     // Pointeur sur la racine de l'arbre
 | ||||
|     HufVertex *root; | ||||
| 
 | ||||
| 	// Quantité de sommets dans l'arbre
 | ||||
| 	size_t size; | ||||
|     // Quantité de sommets dans l'arbre
 | ||||
|     size_t size; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  |  | |||
|  | @ -15,42 +15,42 @@ | |||
| static double* _createFrequencies(const char*); | ||||
| 
 | ||||
| double* _createFrequencies(const char *filepath) { | ||||
| 	double *frequencies = malloc(NUM_CHARS * sizeof(*frequencies)); | ||||
| 	int totalChars = 0; | ||||
|     double *frequencies = malloc(NUM_CHARS * sizeof(*frequencies)); | ||||
|     int totalChars = 0; | ||||
| 
 | ||||
| 	for (size_t i = 0; i < NUM_CHARS; i++) { | ||||
| 		frequencies[i] = 0; | ||||
| 	} | ||||
|     for (size_t i = 0; i < NUM_CHARS; i++) { | ||||
|         frequencies[i] = 0; | ||||
|     } | ||||
| 
 | ||||
| 	// 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"); | ||||
|     // 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"); | ||||
| 
 | ||||
|     if (file == NULL) { | ||||
|         fprintf( | ||||
|             stderr, "Impossible d'ouvrir '%s' : %s\n", | ||||
|             filepath, strerror(errno) | ||||
|         ); | ||||
|          | ||||
| 
 | ||||
|         exit(1); | ||||
|     } | ||||
| 
 | ||||
| 	char current; | ||||
|     char current; | ||||
| 
 | ||||
| 	while ((current = fgetc(file)) != EOF) { | ||||
| 		frequencies[(size_t) current]++; | ||||
| 		totalChars++; | ||||
| 	} | ||||
|     while ((current = fgetc(file)) != EOF) { | ||||
|         frequencies[(size_t) current]++; | ||||
|         totalChars++; | ||||
|     } | ||||
| 
 | ||||
| 	fclose(file); | ||||
|     fclose(file); | ||||
| 
 | ||||
| 	// Conversion des effectifs des caractères en fréquences
 | ||||
| 	for (size_t i = 0; i < NUM_CHARS; i++) { | ||||
| 		frequencies[i] /= totalChars; | ||||
| 	} | ||||
|     // Conversion des effectifs des caractères en fréquences
 | ||||
|     for (size_t i = 0; i < NUM_CHARS; i++) { | ||||
|         frequencies[i] /= totalChars; | ||||
|     } | ||||
| 
 | ||||
| 	return frequencies; | ||||
|     return frequencies; | ||||
| } | ||||
| 
 | ||||
| void compress(const char *filepath) { | ||||
|  | @ -62,17 +62,17 @@ void compress(const char *filepath) { | |||
|     } | ||||
| 
 | ||||
|     printVerbose("\nConstruction de l'arbre de Huffman\n"); | ||||
| 	HufTree tree = createTree(frequencies); | ||||
|     HufTree tree = createTree(frequencies); | ||||
| 
 | ||||
|     free(frequencies); | ||||
|     frequencies = NULL; | ||||
| 
 | ||||
| 	if (isVerbose()) { | ||||
| 		printTree(tree); | ||||
| 	} | ||||
|     if (isVerbose()) { | ||||
|         printTree(tree); | ||||
|     } | ||||
| 
 | ||||
|     printVerbose("\nÉtiquetage des feuilles de l'arbre\n"); | ||||
| 	char** labels = createTreeLabels(tree); | ||||
|     char** labels = createTreeLabels(tree); | ||||
| 
 | ||||
|     freeTree(tree); | ||||
| 
 | ||||
|  | @ -80,5 +80,5 @@ void compress(const char *filepath) { | |||
|         printLabelsTable(labels, NUM_CHARS); | ||||
|     } | ||||
| 
 | ||||
| 	freeTreeLabels(labels); | ||||
|     freeTreeLabels(labels); | ||||
| } | ||||
|  |  | |||
|  | @ -26,15 +26,15 @@ 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); | ||||
|     _printVertex(*tree.root, buffer, 0); | ||||
|     free(buffer); | ||||
| } | ||||
| 
 | ||||
| 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
 | ||||
|         // la probabilité somme des enfants
 | ||||
| 		printf("■\n"); | ||||
|         printf("■\n"); | ||||
| 
 | ||||
|         // Affichage du fils gauche. Augmentation du préfixe
 | ||||
|         // pour l'affichage des enfants du fils gauche
 | ||||
|  | @ -55,11 +55,11 @@ void _printVertex(HufVertex vert, wchar_t *buffer, int length) { | |||
| 
 | ||||
|         buffer[length] = ' '; | ||||
|         _printVertex(*vert.child_r, buffer, length + 4); | ||||
| 	} else { | ||||
|     } else { | ||||
|         // Affichage d'une feuille de l'arbre, correspondant
 | ||||
|         // à un caractère du corpus
 | ||||
| 		printf("%c\n", _safeChar(vert.character)); | ||||
| 	} | ||||
|         printf("%c\n", _safeChar(vert.character)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| int _maxDepth(HufVertex vert) { | ||||
|  |  | |||
|  | @ -4,30 +4,30 @@ | |||
| #include <string.h> | ||||
| 
 | ||||
| /**
 | ||||
| * Trouver les deux sommets de valeur la plus faible parmi | ||||
| * tous les sommets pointés par le tableau. Place l'indice | ||||
| * du minimum dans `min` et de l'avant-dernier dans `sec`. | ||||
| */ | ||||
|  * Trouver les deux sommets de valeur la plus faible parmi | ||||
|  * tous les sommets pointés par le tableau. Place l'indice | ||||
|  * du minimum dans `min` et de l'avant-dernier dans `sec`. | ||||
|  */ | ||||
| static void _findMinimalVertices(HufVertex**, size_t, size_t* min, size_t* sec); | ||||
| 
 | ||||
| /**
 | ||||
| * Libérer récursivement la mémoire occupée par le sommet | ||||
| * donné ainsi que celle de tous ses enfants (s'il en a). | ||||
| */ | ||||
|  * Libérer récursivement la mémoire occupée par le sommet | ||||
|  * donné ainsi que celle de tous ses enfants (s'il en a). | ||||
|  */ | ||||
| static void _freeTreeVertex(HufVertex*); | ||||
| 
 | ||||
| /**
 | ||||
| * Créer une nouvelle chaîne contenant la chaîne donnée | ||||
| * suffixée du caractère donné | ||||
| */ | ||||
|  * Créer une nouvelle chaîne contenant la chaîne donnée | ||||
|  * suffixée du caractère donné | ||||
|  */ | ||||
| static char* _appendToString(char*, size_t, char); | ||||
| 
 | ||||
| /**
 | ||||
| * Remplit le tableau d'étiquettes données avec les étiquettes | ||||
| * des feuilles trouvées dans la sous-partie de l'arbre dont | ||||
| * le sommet donné est la racine. Toutes les étiquettes ajoutées | ||||
| * au tableau seront préfixées de la chaîne passée en paramètre | ||||
| */ | ||||
|  * Remplit le tableau d'étiquettes données avec les étiquettes | ||||
|  * des feuilles trouvées dans la sous-partie de l'arbre dont | ||||
|  * le sommet donné est la racine. Toutes les étiquettes ajoutées | ||||
|  * au tableau seront préfixées de la chaîne passée en paramètre | ||||
|  */ | ||||
| static void _labelVertex(HufVertex, char**, char*, size_t); | ||||
| 
 | ||||
| HufTree createTree(double* frequencies) { | ||||
|  |  | |||
							
								
								
									
										20
									
								
								src/main.c
								
								
								
								
							
							
						
						
									
										20
									
								
								src/main.c
								
								
								
								
							|  | @ -36,22 +36,22 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { | |||
| 
 | ||||
|     switch (key) { | ||||
|         case 'V': | ||||
|             args->verbose = TRUE; | ||||
|             break; | ||||
|         args->verbose = TRUE; | ||||
|         break; | ||||
| 
 | ||||
|         case ARGP_KEY_ARG: | ||||
|             // Consommation de tous les fichiers en argument
 | ||||
|             // et arrêt du parsage
 | ||||
|             args->files = &state->argv[state->next - 1]; | ||||
|             state->next = state->argc; | ||||
|             break; | ||||
|         // Consommation de tous les fichiers en argument
 | ||||
|         // et arrêt du parsage
 | ||||
|         args->files = &state->argv[state->next - 1]; | ||||
|         state->next = state->argc; | ||||
|         break; | ||||
| 
 | ||||
|         case ARGP_KEY_NO_ARGS: | ||||
|             argp_usage(state); | ||||
|             break; | ||||
|         argp_usage(state); | ||||
|         break; | ||||
| 
 | ||||
|         default: | ||||
|             return ARGP_ERR_UNKNOWN; | ||||
|         return ARGP_ERR_UNKNOWN; | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue