// common.h  
#ifndef COMMON_H  
#define COMMON_H  

#include <stdint.h>  
#include <stdlib.h>  
#include <string.h>  

// 哈夫曼树节点结构  
typedef struct HuffmanNode {  
    unsigned char byte;       // 字节值  
    size_t frequency;        // 频率  
    struct HuffmanNode *left;  
    struct HuffmanNode *right;  
} HuffmanNode;  

// 用于堆排序的节点数组元素  
typedef struct {  
    unsigned char byte;  
    size_t frequency;  
} FrequencyItem;  

// FNV-1a 哈希算法常量  
#define FNV1A_64_INIT 0xcbf29ce484222325ULL  
#define FNV1A_64_PRIME 0x100000001b3ULL  

// 函数声明  
// 堆排序相关  
void heap_sort(FrequencyItem *arr, size_t n);  
void heapify(FrequencyItem *arr, size_t n, size_t i);  

// 哈希计算  
uint64_t fnv1a_64(const void *data, size_t length);  

// 文件操作辅助函数  
size_t get_file_size(const char *filename);  
int read_file_content(const char *filename, unsigned char **content, size_t *size);  

#endif // COMMON_H
