skuska
This commit is contained in:
		
							parent
							
								
									ed11fb58e2
								
							
						
					
					
						commit
						ca84283fa2
					
				| @ -137,6 +137,25 @@ int read_bit(FILE* file, unsigned char* buffer, int* bit_pos) { | ||||
|     return bit; | ||||
| } | ||||
| 
 | ||||
| HuffmanNode* deserialize_tree(FILE* file) { | ||||
|     int marker = fgetc(file); | ||||
|     if (marker == EOF) return NULL; | ||||
| 
 | ||||
|     if (marker == '1') { | ||||
|         // Leaf node: Read the symbol
 | ||||
|         HuffmanNode* node = (HuffmanNode*)malloc(sizeof(HuffmanNode)); | ||||
|         node->symbol = fgetc(file); | ||||
|         node->left = node->right = NULL; | ||||
|         return node; | ||||
|     } | ||||
| 
 | ||||
|     // Internal node: Create a new node and deserialize children
 | ||||
|     HuffmanNode* node = (HuffmanNode*)malloc(sizeof(HuffmanNode)); | ||||
|     node->left = deserialize_tree(file); | ||||
|     node->right = deserialize_tree(file); | ||||
|     return node; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int compress_1(const char* input_file_name, const char* output_file_name) { | ||||
|     size_t size; | ||||
| @ -207,16 +226,15 @@ int decompress_1(const char* input_file_name, const char* output_file_name) { | ||||
|         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 */; | ||||
|      | ||||
|     HuffmanNode* root = deserialize_tree(input_file); | ||||
|     if (!root) { | ||||
|         fclose(input_file); | ||||
|         fclose(output_file); | ||||
|         return -1; | ||||
|     } | ||||
| 
 | ||||
|     // Decompress data
 | ||||
|      | ||||
|     unsigned char bit_buffer[1]; | ||||
|     int bit_pos = 0; | ||||
|     HuffmanNode* current = root; | ||||
| @ -242,6 +260,7 @@ int decompress_1(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; | ||||
|     unsigned char* data = read_file(input_file_name, &size); | ||||
|  | ||||
| @ -33,4 +33,6 @@ void generate_huffman_codes(HuffmanNode* root, char** codes, char* buffer, int d | ||||
| 
 | ||||
| void free_huffman_tree(HuffmanNode* root); | ||||
| 
 | ||||
| HuffmanNode* deserialize_tree(FILE* file); | ||||
| 
 | ||||
| #endif | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user