summaryrefslogtreecommitdiff
path: root/src/btree_naive.c
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2021-10-05 12:37:17 +0000
committer0scar <qgt268@alumni.ku.dk>2021-10-05 12:37:17 +0000
commite29081ca2e9e9caa95e91fdbab1a3e3d8597d1ea (patch)
tree46d52c2c12f83ed146fccce71b51ac5a84f55d31 /src/btree_naive.c
parent73ae3c781b6aa00cc8abed801b7ac4324074e04e (diff)
Add btree-printing function
Diffstat (limited to 'src/btree_naive.c')
-rw-r--r--src/btree_naive.c35
1 files changed, 35 insertions, 0 deletions
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);
+}