diff --git a/sandbox/btree/btree.c b/sandbox/btree/btree.c new file mode 100644 index 0000000..53daab3 --- /dev/null +++ b/sandbox/btree/btree.c @@ -0,0 +1,37 @@ +#include "include/socks/btree.h" +#include + +static void insert_fixup(btree_t *tree, btree_node_t *node) +{ + +} + +void btree_insert(btree_t *tree, btree_node_t *node) +{ + if (!tree->b_root) { + tree->b_root = node; + return; + } + + btree_node_t *cur = tree->b_root; + while (1) { + btree_node_t **nextp = NULL; + + if (node->b_key >= cur->b_key) { + nextp = &cur->b_right; + } else { + nextp = &cur->b_left; + } + + if (*nextp) { + cur = *nextp; + } else { + *nextp = node; + break; + } + } + + insert_fixup(tree, node); +} + +void btree_delete(btree_t *tree, btree_node_t *node) {} diff --git a/sandbox/btree/include/socks/btree.h b/sandbox/btree/include/socks/btree.h new file mode 100644 index 0000000..7768215 --- /dev/null +++ b/sandbox/btree/include/socks/btree.h @@ -0,0 +1,21 @@ +#ifndef SOCKS_BTREE_H_ +#define SOCKS_BTREE_H_ + +#include + +typedef uint64_t btree_key_t; + +typedef struct btree_node { + struct btree_node *b_left, *b_right; + signed char b_bfactor; + btree_key_t b_key; +} btree_node_t; + +typedef struct btree_t { + struct btree_node *b_root; +} btree_t; + +extern void btree_insert(btree_t *tree, btree_node_t *node); +extern void btree_delete(btree_t *tree, btree_node_t *node); + +#endif