Я программирую дерево префиксов в C для хранения IP-префиксов.Ключами являются IP-префиксы.Я хотел бы использовать его с 32-битными или 128-битными ключами (адреса IPv4 / IPv6).
Функции вставки / удаления / поиска должны вызывать различные битовые функции для варианта ipv4 или ipv6.
Как я могу сделать это в 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);
спасибо за любые подсказки: =)