From be0feab19ecd37bee2d5fa0eb297d84116ca2996 Mon Sep 17 00:00:00 2001
From: Florian Burgener <florian.brgnr@gmail.com>
Date: Mon, 23 May 2022 11:31:42 +0200
Subject: [PATCH] Progress of the implementation

---
 src/bptree.c       | 45 +++++++++++++++++++++++++++++++++++++++++++++
 src/bptree.h       | 18 ++++++++++++++++++
 src/sorted_array.c |  8 ++++----
 3 files changed, 67 insertions(+), 4 deletions(-)
 create mode 100644 src/bptree.c

diff --git a/src/bptree.c b/src/bptree.c
new file mode 100644
index 0000000..b551024
--- /dev/null
+++ b/src/bptree.c
@@ -0,0 +1,45 @@
+#include "bptree.h"
+
+#include <stdbool.h>
+#include <stdlib.h>
+
+///
+
+static bool has_minimum_keys(BPTreeNode *root);
+static bool has_maximum_keys(BPTreeNode *root);
+
+static bool has_minimum_keys(BPTreeNode *root) {
+    return root->keys_length == root->order;
+}
+
+static bool has_maximum_keys(BPTreeNode *root) {
+    return root->keys_length == 2 * root->order;
+}
+
+///
+
+BPTreeNode *bptree_init(int order) {
+    BPTreeNode *root = (BPTreeNode *)malloc(sizeof(BPTreeNode));
+    root->order = order;
+    root->is_leaf = true;
+    root->keys_length = 0;
+    root->keys = (int *)malloc(sizeof(int) * (2 * order));
+    root->children_length = 0;
+    root->children = (BPTreeNode **)malloc(sizeof(BPTreeNode *) * (2 * order + 1));
+    return root;
+}
+
+void bptree_destroy(BPTreeNode **root) {
+    for (int i = 0; i < (*root)->children_length; i++) {
+        bptree_destroy((*root)->children[i]);
+    }
+
+    free((*root)->keys);
+    free((*root)->children);
+    free(*root);
+    *root = NULL;
+}
+
+// Insertion
+
+// Deletion
diff --git a/src/bptree.h b/src/bptree.h
index e69de29..559ccfe 100644
--- a/src/bptree.h
+++ b/src/bptree.h
@@ -0,0 +1,18 @@
+#ifndef BPTREE_H
+#define BPTREE_h
+
+#include "stdbool.h"
+
+typedef struct BPTreeNode {
+    int order;
+    bool is_leaf;
+    int keys_length;
+    int *keys;
+    int children_length;
+    struct BPTreeNode **children;
+} BPTreeNode;
+
+BPTreeNode *bptree_init(int order);
+void bptree_destroy(BPTreeNode **root);
+
+#endif
diff --git a/src/sorted_array.c b/src/sorted_array.c
index 0fc9d91..0bbf3a0 100644
--- a/src/sorted_array.c
+++ b/src/sorted_array.c
@@ -61,15 +61,15 @@ void sorted_array_print(int *array, int array_length) {
 }
 
 int sorted_array_insert(int *array, int *array_length, int value) {
-    int index = lower_bound(array, *array_length, value);
+    int insertion_index = lower_bound(array, *array_length, value);
 
-    for (int i = *array_length - 1; i >= index; i--) {
+    for (int i = *array_length - 1; i >= insertion_index; i--) {
         array[i + 1] = array[i];
     }
 
-    array[index] = value;
+    array[insertion_index] = value;
     *array_length += 1;
-    return index;
+    return insertion_index;
 }
 
 void sorted_array_delete(int *array, int *array_length, int value) {
-- 
GitLab