X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/836d44ecb7a2c37427f6baf8b25e872e9e943d5b..378a473943ba2bfe38c303d198aab41056095b71:/lunaix-os/includes/lunaix/ds/btrie.h diff --git a/lunaix-os/includes/lunaix/ds/btrie.h b/lunaix-os/includes/lunaix/ds/btrie.h index bcf0250..d24cf84 100644 --- a/lunaix-os/includes/lunaix/ds/btrie.h +++ b/lunaix-os/includes/lunaix/ds/btrie.h @@ -6,6 +6,9 @@ #define BTRIE_BITS 4 +/** + * key-sorted prefix tree + */ struct btrie { struct btrie_node* btrie_root; @@ -14,12 +17,13 @@ struct btrie struct btrie_node { - struct llist_header children; - struct llist_header siblings; struct llist_header nodes; struct btrie_node* parent; unsigned long index; void* data; + + struct btrie_node** children; + int children_cnt; }; void @@ -28,9 +32,21 @@ btrie_init(struct btrie* btrie, unsigned int order); void* btrie_get(struct btrie* root, unsigned long index); +/** + * Set an object into btrie tree at given location, + * override if another object is already present. + */ void btrie_set(struct btrie* root, unsigned long index, void* data); +/** + * Map an object into btrie tree, return the index the object + * mapped to + */ +unsigned long +btrie_map(struct btrie* root, + unsigned long start, unsigned long end, void* data); + void* btrie_remove(struct btrie* root, unsigned long index);