#if !defined(_SYS_RADIXTREE_H_)
#define _SYS_RADIXTREE_H_
struct radix_tree {
void *t_root;
unsigned int t_height;
};
#if defined(_KERNEL) || defined(_STANDALONE)
#include <sys/types.h>
#else
#include <stdbool.h>
#include <stdint.h>
#endif
#if defined(_KERNEL)
void radix_tree_init(void);
void radix_tree_await_memory(void);
#endif
void radix_tree_init_tree(struct radix_tree *);
void radix_tree_fini_tree(struct radix_tree *);
bool radix_tree_empty_tree_p(struct radix_tree *);
int radix_tree_insert_node(struct radix_tree *, uint64_t, void *);
void *radix_tree_replace_node(struct radix_tree *, uint64_t, void *);
void *radix_tree_remove_node(struct radix_tree *, uint64_t);
void *radix_tree_lookup_node(struct radix_tree *, uint64_t);
unsigned int radix_tree_gang_lookup_node(struct radix_tree *, uint64_t,
void **, unsigned int, bool);
unsigned int radix_tree_gang_lookup_node_reverse(struct radix_tree *, uint64_t,
void **, unsigned int, bool);
typedef unsigned int radix_tree_tagmask_t;
#define RADIX_TREE_TAG_ID_MAX 2
radix_tree_tagmask_t radix_tree_get_tag(struct radix_tree *, uint64_t,
radix_tree_tagmask_t);
void radix_tree_set_tag(struct radix_tree *, uint64_t, radix_tree_tagmask_t);
void radix_tree_clear_tag(struct radix_tree *, uint64_t, radix_tree_tagmask_t);
unsigned int radix_tree_gang_lookup_tagged_node(struct radix_tree *, uint64_t,
void **, unsigned int, bool, radix_tree_tagmask_t);
unsigned int radix_tree_gang_lookup_tagged_node_reverse(struct radix_tree *,
uint64_t, void **, unsigned int, bool, radix_tree_tagmask_t);
bool radix_tree_empty_tagged_tree_p(struct radix_tree *, radix_tree_tagmask_t);
#endif