CDN_DNS/radix/radix.h

48 lines
1.2 KiB
C
Raw Normal View History

2024-06-07 16:57:34 +02:00
#ifndef RADIX_HEADER_736213980973149671328765
#define RADIX_HEADER_736213980973149671328765
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define VALID_RULE 1
#define INVALID_RULE 0
#define RULE_NOT_FOUND -1
union ipv6 {
unsigned short s[8];
unsigned int i[4];
unsigned long l[2];
};
struct radix_node {
struct radix_node* _l;
struct radix_node* _r;
union ipv6 _ip;
unsigned short _rule;
unsigned _ip_end_bit:7;
unsigned _rule_valid:1;
};
struct radix_holder {
struct radix_node* _root;
size_t _size;
};
typedef struct radix_node* radix_node_t;
typedef struct radix_holder* radix_holder_t;
typedef union ipv6 ipv6_t;
typedef int rule_t;
struct radix_holder* create_holder();
struct radix_node* create_node(ipv6_t key, unsigned end_bit, unsigned rule);
static struct radix_node* clone_node(struct radix_node* n);
static void split_node(struct radix_node* n, unsigned bit);
int destory_holder(struct radix_holder*);
int destory_node(struct radix_node*);
int radix_insert(struct radix_holder*, ipv6_t key, int val, int mask);
rule_t radix_search(struct radix_holder*, ipv6_t key);
#endif