diff options
| author | 0scar <qgt268@alumni.ku.dk> | 2021-10-05 12:37:17 +0000 |
|---|---|---|
| committer | 0scar <qgt268@alumni.ku.dk> | 2021-10-05 12:37:17 +0000 |
| commit | e29081ca2e9e9caa95e91fdbab1a3e3d8597d1ea (patch) | |
| tree | 46d52c2c12f83ed146fccce71b51ac5a84f55d31 | |
| parent | 73ae3c781b6aa00cc8abed801b7ac4324074e04e (diff) | |
Add btree-printing function
| -rw-r--r-- | src/btree.h | 2 | ||||
| -rw-r--r-- | src/btree_naive.c | 35 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/btree.h b/src/btree.h index c8f7498..b62b255 100644 --- a/src/btree.h +++ b/src/btree.h @@ -42,4 +42,6 @@ void btree_insert(struct btree *btree, void *elem); void* btree_delete(struct btree *btree, void *elem); void* btree_update(struct btree *btree, void *elem_key, void *elem); +void btree_print(struct btree *btree, void (*print_elem)(const void*)); + #endif diff --git a/src/btree_naive.c b/src/btree_naive.c index 207475e..be6fdd3 100644 --- a/src/btree_naive.c +++ b/src/btree_naive.c @@ -300,3 +300,38 @@ void* btree_search(struct btree *btree, void *elem) { void* btree_delete(struct btree *btree, void *elem) {} void* btree_update(struct btree *btree, void *elem_key, void *elem) {} + + +void node_print(struct node *root, const size_t elem_size, const int indent, void (*print_elem)(const void*)) { + ssize_t i; + int t; + + for (t = 0; t < indent - 1; t++) { fputs(" ┃ ", stdout); } + if (indent > 0) { fputs(" ┣┯", stdout); } + printf("printing node %p, c:%ld n:%ld\n", (void*)root, root->c, root->n); + + if (node_leaf(root)) { + for (i = 0; i < root->n - 1; i++) { + const size_t ofst = i * elem_size; + for (t = 0; t < indent; t++) { fputs(" ┃├", stdout); } + print_elem(root->items + ofst); + } + for (t = 0; t < indent; t++) { fputs(" ┃└", stdout); } + print_elem(root->items + i * elem_size); + } else { + size_t ofst = 0; + for (i = 0; i < root->c - 1; i++) { + node_print(root->children[i], elem_size, indent + 1, print_elem); + for (t = 0; t < indent; t++) { fputs(" ┃ ", stdout); } + print_elem(root->items + ofst); + ofst += elem_size; + } + node_print(root->children[i], elem_size, indent + 1, print_elem); + } + +} + +void btree_print(struct btree *btree, void (*print_elem)(const void*)) { + printf("BTRee: degree:%ld\n", btree->degree); + node_print(btree->root, btree->elem_size, 0, print_elem); +} |
