/* * crit-bit tree implementation, does no allocations internally * For more information on crit-bit trees: https://cr.yp.to/critbit.html * Based on Adam Langley's adaptation of Dan Bernstein's public domain code * git clone https://github.com/agl/critbit.git * * This is adapted to store arbitrary data (not just NUL-terminated C strings * and allocates no memory internally. The user needs to allocate * "struct cb_node" and fill cb_node.k[] with arbitrary match data * for memcmp. * If "klen" is variable, then it should be embedded into "c_node.k[]" * Recursion is bound by the maximum value of "klen" used. */ #ifndef CBTREE_H #define CBTREE_H struct cb_node; struct cb_node { … }; struct cb_tree { … }; enum cb_next { … }; #define CBTREE_INIT … static inline void cb_init(struct cb_tree *t) { … } struct cb_node *cb_lookup(struct cb_tree *, const uint8_t *k, size_t klen); struct cb_node *cb_insert(struct cb_tree *, struct cb_node *, size_t klen); cb_iter; void cb_each(struct cb_tree *, const uint8_t *kpfx, size_t klen, cb_iter, void *arg); #endif /* CBTREE_H */