skuska
This commit is contained in:
		
							parent
							
								
									6796bfa7f1
								
							
						
					
					
						commit
						ed11fb58e2
					
				| @ -194,17 +194,54 @@ int compress_1(const char* input_file_name, const char* output_file_name) { | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| int decompress_1(const char* input_file_name, const char* output_file_name) { | int decompress_1(const char* input_file_name, const char* output_file_name) { | ||||||
|     size_t size; |     FILE* input_file = fopen(input_file_name, "rb"); | ||||||
|     unsigned char* data = read_file(input_file_name, &size); |     if (!input_file) { | ||||||
|     if (!data) return -1; |         perror("Error opening input file"); | ||||||
|  |         return -1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     FILE* output_file = fopen(output_file_name, "wb"); | ||||||
|  |     if (!output_file) { | ||||||
|  |         perror("Error opening output file"); | ||||||
|  |         fclose(input_file); | ||||||
|  |         return -1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Reconstruct Huffman tree (you should deserialize it from the file)
 | ||||||
|  |     // Placeholder: This assumes you rebuild the same tree during decompression
 | ||||||
|  |     HuffmanNode* root = /* Deserialize tree here */; | ||||||
|  |     if (!root) { | ||||||
|  |         fclose(input_file); | ||||||
|  |         fclose(output_file); | ||||||
|  |         return -1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Decompress data
 | ||||||
|  |     unsigned char bit_buffer[1]; | ||||||
|  |     int bit_pos = 0; | ||||||
|  |     HuffmanNode* current = root; | ||||||
|  | 
 | ||||||
|  |     while (1) { | ||||||
|  |         int bit = read_bit(input_file, bit_buffer, &bit_pos); | ||||||
|  |         if (bit == -1) break; | ||||||
|  | 
 | ||||||
|  |         current = (bit == 0) ? current->left : current->right; | ||||||
|  | 
 | ||||||
|  |         if (!current->left && !current->right) { | ||||||
|  |             fputc(current->symbol, output_file); | ||||||
|  |             current = root; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fclose(input_file); | ||||||
|  |     fclose(output_file); | ||||||
|  |     free_huffman_tree(root); | ||||||
| 
 | 
 | ||||||
|     printf("Decompressing using Huffman coding...\n"); |     printf("Decompressing using Huffman coding...\n"); | ||||||
| 
 |     return 0; | ||||||
|     int result = write_file(output_file_name, data, size); |  | ||||||
|     free(data); |  | ||||||
|     return result; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| int compress_2(const char* input_file_name, const char* output_file_name) { | int compress_2(const char* input_file_name, const char* output_file_name) { | ||||||
|     size_t size; |     size_t size; | ||||||
|     unsigned char* data = read_file(input_file_name, &size); |     unsigned char* data = read_file(input_file_name, &size); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user