我正在編程C中的前綴樹來存儲IP前綴。 這些密鑰是IP前綴。 我想用它與32位或128位密鑰(IPv4/IPv6地址)。具有2種不同密鑰類型和最少冗餘代碼的樹數據結構
插入/刪除/查找功能需要爲ipv4或ipv6變體調用不同的bitop函數。
我怎麼能在C中做到這一點?
- 該鍵的類型不應該在運行時確定。
- 我想編譯爲不同版本的數據結構,它使用IPv4前綴和一個用於IPv6前綴。
- 我需要稍後在同一個C文件的樹中使用這兩個版本。
- 我想有最小的重複代碼
最後我想有以下的結構和功能:對任何提示
typedef struct tree_node6_t {
ipv6_addr prefix;
u_int8_t len;
struct tree_node6_t* parent;
struct tree_node6_t* lchild;
struct tree_node6_t* rchild;
void* data;
} tree_node6;
typedef struct tree_node4_t {
ipv4_addr prefix;
u_int8_t len;
struct tree_node4_t* parent;
struct tree_node4_t* lchild;
struct tree_node4_t* rchild;
void* data;
} tree_node;
void tree_insert4(tree_node* root, tree_node* new_node, const unsigned int level);
void tree_insert6(tree_node* root, tree_node* new_node, const unsigned int level);
tree_node* tree_lookup4(const tree_node* root_node, const ipv4_addr* prefix, const u_int8_t prefix_len, unsigned int* level);
tree_node* tree_lookup6(const tree_node* root_node, const ipv6_addr* prefix, const u_int8_t prefix_len, unsigned int* level);
感謝:=)
肯定的,但在128位整數存儲32位不會忽略是一個巨大的浪費內存(幾十萬節點) – fho