art
struct art *art;
art = tbl->r_art;
assert(art != NULL);
assert(art->art_root == NULL);
art_init(struct art *art, unsigned int alen)
art->art_root = 0;
art->art_levels = levels;
art->art_nlevels = nlevels;
art->art_alen = alen;
struct art *
struct art *art;
art = malloc(sizeof(*art), M_RTABLE, M_NOWAIT|M_ZERO);
if (art == NULL)
art_init(art, alen);
return (art);
art_match(struct art *art, const void *addr)
heap = SMR_PTR_GET(&art->art_root);
unsigned int bits = art->art_levels[level];
KASSERT(level < art->art_nlevels);
art_lookup(struct art *art, const void *addr, unsigned int plen)
KASSERT(plen <= art->art_alen);
heap = SMR_PTR_GET(&art->art_root);
bits = art->art_levels[level];
KASSERT(level < art->art_nlevels);
art_is_empty(struct art *art)
return (SMR_PTR_GET_LOCKED(&art->art_root) == NULL);
art_insert(struct art *art, struct art_node *an)
KASSERT(an->an_plen <= art->art_alen);
heap = SMR_PTR_GET_LOCKED(&art->art_root);
at = art_table_get(art, NULL, -1);
SMR_PTR_SET_LOCKED(&art->art_root, heap);
art_table_ref(art, at);
struct art_table *child = art_table_get(art, at, j);
art_table_ref(art, at);
art_table_ref(art, at);
art_delete(struct art *art, const void *addr, unsigned int plen)
KASSERT(plen <= art->art_alen);
heap = SMR_PTR_GET_LOCKED(&art->art_root);
art_table_free(art, at);
art_table_free(art, at);
art_table_ref(struct art *art, struct art_table *at)
art_table_free(struct art *art, struct art_table *at)
at = art_table_put(art, at);
art_iter_open(struct art *art, struct art_iter *ai)
art_heap_entry *heap = SMR_PTR_GET(&art->art_root);
ai->ai_art = art;
art_walk(struct art *art, int (*f)(struct art_node *, void *), void *arg)
ART_FOREACH(an, art, &ai) {
art_table_get(struct art *art, struct art_table *parent, unsigned int j)
KASSERT(level < art->art_nlevels);
bits = art->art_levels[level];
art_table_put(struct art *art, struct art_table *at)
SMR_PTR_SET_LOCKED(&art->art_root, NULL);
struct art_table *art_table_get(struct art *, struct art_table *,
struct art_table *art_table_put(struct art *, struct art_table *);
struct art_table *art_table_ref(struct art *, struct art_table *);
int art_table_free(struct art *, struct art_table *);
struct art *art_alloc(unsigned int);
void art_init(struct art *, unsigned int);
struct art_node *art_insert(struct art *, struct art_node *);
struct art_node *art_delete(struct art *, const void *, unsigned int);
struct art_node *art_match(struct art *, const void *);
struct art_node *art_lookup(struct art *, const void *, unsigned int);
int art_is_empty(struct art *);
struct art *ai_art;
struct art_node *art_iter_open(struct art *, struct art_iter *);
int art_walk(struct art *,
struct art *sc_aip4;
struct art *sc_aip6;
wg_aip_lookup(struct art *, void *);
struct art *root;
wg_aip_lookup(struct art *root, void *addr)
struct art *root;
struct art;
struct art *r_art; /* [I] */
kread((u_long)tbl.r_art, &art, sizeof(art));
if (art.art_root == NULL)
node = getdefault(art.art_root);
p_table(art.art_root);
struct art art;