From f5491e8674c5b9e9c8550f7cab72111ba3586b46 Mon Sep 17 00:00:00 2001 From: Florian Burgener <florian.brgnr@gmail.com> Date: Wed, 25 May 2022 21:08:05 +0200 Subject: [PATCH] Refactoring --- _main.c | 32 ------ src/Array.c | 16 +-- src/Array.h | 2 +- src/Array.o | Bin 35344 -> 35264 bytes src/Directory.o | Bin 17272 -> 17272 bytes src/DirectoryRecord.o | Bin 17416 -> 17416 bytes src/bptree.c | 222 +++++++++++++++++++++--------------------- src/bptree.h | 11 +-- src/bptree.o | Bin 85120 -> 92496 bytes src/main.c | 34 +++++-- src/main.o | Bin 14248 -> 21416 bytes src/sorted_array.c | 126 ------------------------ src/sorted_array.h | 24 ----- 13 files changed, 151 insertions(+), 316 deletions(-) delete mode 100644 _main.c delete mode 100644 src/sorted_array.c delete mode 100644 src/sorted_array.h diff --git a/_main.c b/_main.c deleted file mode 100644 index 9f584fe..0000000 --- a/_main.c +++ /dev/null @@ -1,32 +0,0 @@ -#include <assert.h> -// Warning : stdbool -#include <stdbool.h> -#include <stdio.h> -#include <stdlib.h> - -#include "bptree.h" -#include "sorted_array.h" - -int main() { - BPTreeNode *root = bptree_init(2); - int keys_length = 40; - uint64_t keys[] = {8, 12, 11, 47, 22, 95, 86, 40, 33, 78, 28, 5, 75, 88, 21, 56, 82, 51, 93, 66, 48, 70, 57, 65, 35, 4, 60, 41, 49, 55, 68, 72, 23, 31, 30, 42, 18, 87, 24, 58}; - array_print(keys_length, keys); - - for (int i = 0; i < keys_length; i++) { - bptree_insert(root, keys[i], keys[i] * 1000); - } - - bptree_print(root, 0); - - for (int i = 0; i < keys_length; i++) { - uint64_t data; - bool found = bptree_search(root, keys[i], &data); - - assert(found == true); - assert(data == keys[i] * 1000); - } - - bptree_destroy(&root); - return EXIT_SUCCESS; -} diff --git a/src/Array.c b/src/Array.c index 3c57e18..2aae12b 100644 --- a/src/Array.c +++ b/src/Array.c @@ -5,7 +5,7 @@ #include <stdio.h> #include <stdlib.h> -int _lower_bound(IntegerArray *array, uint64_t item) { +int lower_bound(IntegerArray *array, uint64_t item) { int low = 0; int high = array->size - 1; @@ -38,10 +38,10 @@ void IntegerArray_destroy(IntegerArray **array) { } int IntegerArray_insert_sorted(IntegerArray *array, uint64_t item) { - int index = _lower_bound(array, item); + int index = lower_bound(array, item); for (int i = array->size - 1; i >= index; i--) { - array[i + 1] = array[i]; + array->items[i + 1] = array->items[i]; } array->items[index] = item; @@ -51,7 +51,7 @@ int IntegerArray_insert_sorted(IntegerArray *array, uint64_t item) { void IntegerArray_insert_at_index(IntegerArray *array, int index, uint64_t item) { for (int i = array->size - 1; i >= index; i--) { - array[i + 1] = array[i]; + array->items[i + 1] = array->items[i]; } array->items[index] = item; @@ -63,7 +63,7 @@ void IntegerArray_append(IntegerArray *array, uint64_t item) { array->size++; } -static int _IntegerArray_find_index(IntegerArray *array, uint64_t item) { +static int IntegerArray_find_index(IntegerArray *array, uint64_t item) { int low = 0; int high = array->size - 1; @@ -83,7 +83,7 @@ static int _IntegerArray_find_index(IntegerArray *array, uint64_t item) { } bool IntegerArray_binary_search(IntegerArray *array, uint64_t item, int *index) { - *index = _IntegerArray_find_index(array, item); + *index = IntegerArray_find_index(array, item); return *index != -1; } @@ -116,7 +116,7 @@ void BPTreeNodeArray_destroy(BPTreeNodeArray **array) { void BPTreeNodeArray_insert_at_index(BPTreeNodeArray *array, int index, BPTreeNode *item) { for (int i = array->size - 1; i >= index; i--) { - array[i + 1] = array[i]; + array->items[i + 1] = array->items[i]; } array->items[index] = item; @@ -130,7 +130,7 @@ void BPTreeNodeArray_append(BPTreeNodeArray *array, BPTreeNode *item) { void BPTreeNodeArray_delete_at_index(BPTreeNodeArray *array, int index) { for (int i = index; i < array->size; i++) { - array[i] = array[i + 1]; + array->items[i] = array->items[i + 1]; } array->size--; diff --git a/src/Array.h b/src/Array.h index 38f8f81..0ba36fe 100644 --- a/src/Array.h +++ b/src/Array.h @@ -9,7 +9,7 @@ typedef struct IntegerArray { int size; } IntegerArray; -int _lower_bound(IntegerArray *array, uint64_t item); +int lower_bound(IntegerArray *array, uint64_t item); IntegerArray *IntegerArray_init(int capacity); void IntegerArray_destroy(IntegerArray **array); diff --git a/src/Array.o b/src/Array.o index 98ac59ff25f79787cbd31def792ed68db7f7bdb3..c31e4c7ab6aed7d5c02fffac7260f7ed7ca753d5 100644 GIT binary patch literal 35264 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 b3t~yDpfUlQ{)~Evjxdk|Axtod#$^BiD;dHZ literal 35344 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 diff --git a/src/Directory.o b/src/Directory.o index 44cdaf0a743353597ff980dca51462dc4e9396e4..77b260a2d3c9b67d23dd49ac88c471b95c0068f6 100644 GIT binary patch delta 505 zcmey-#`vR+al;WQ5&hh}68&WT(BjmhVtu!q{G!anyve;Xa+{AxZD-uPTE>}i^9R`* zT$1uE3}7G#CK(vG7#J8t7#JAlO@62$&Sb_k`Ip8%COziKyENSxvnMlZ=}U<*LzLcy zP;earER(&o^q9n$Cs%2?F)1)lKBVQwXg`@#+nsUU<Unn4#;ubxwc{msK(#Mtgy@G^ z_;2z<ZGFZGlLd9+jToSgVq!v7a}27NA5EN>dGaEiKF09LhPvgFPoSDtqba&J`Jk>o z<IBk(b@drPOjgtrmrR2i_Y+O!s>y+R?u?$3XX?2#{+#?!PoIgAd9skc8)NR|Nd0og zUz0ED_cPwyoM`Z$iLq{TqVaJ?#`lvoP2Wpih8kGUj_PjS$%ba)lKY_6bfL*APEIrv zXS_4H(oA2nA8NurG&LEU51O$vG8Sw;Y2MGtXgWF4(VX${<cW^<jPEyJbX?8|0QymA A?EnA( delta 503 zcmey-#`vR+al;X*&EKT9GYaYF=9TCt>xUMn78UEK<>VJ-PQD=}w|T9MGvnrWvbVS- zWmy=&KoCqaFmN$2Fo-ZPFyu^rs3FeumU;3ojeSgim?rPibYrxf%&4U=^@Itc^e%*g z>$t}}*-J~0=?T;1DlIprcTAHHX}K}-PUh5hXRMhVs4dReJULT4Ub2lDqHj4Pgoau8 zXYxaBea5)Sf;#a==b&nspjN@uOo58?qlw>Un!HG-k5P59p>Db4BdCv7qba&F`Jk>o z<MzoPb@dtdO;*$smo$MI_Y+NJ#pFOecSiBaGxgjVk57K6r_XerX|j;M8>98)Nd0og z6O%9M_cJcvoM`Z$iP2|sqVaJ?#<!C-P2Wo{gc?}Sj_Nn=$%ba)l08ssy3l0hCnuVT zGp?FkX{Ik33pHUMni{js2hG?S8SOToH1FqRG@cykXwG<W@<c~_#<!a<Ixc4f02mi) A;{X5v diff --git a/src/DirectoryRecord.o b/src/DirectoryRecord.o index 86700a2bced8ec1297755924790fa9a47b1b5744..72bea73d54574ea676e178d73fb85693a8304b1d 100644 GIT binary patch delta 442 zcmeC^VC?8%+`uVqsGplxqMxiETAW%`tnZeSUzC}cr|*(loL!P%pkJJvk)NNVo03_S znp~1!RH<KFlsrjUe6zfC5##2AGNz21f5<v;N%FEVfPo;GWMJT8U|<koU|>j_9H=4A z6wEX^OJg6CCi7%1O*h7h$%UHnOw!DgFKN0lT1}SJa%bE<IZ;cTao6NZt$4|!%n&nj z7$G#wsJoLtYUwl1nyjcD&-iz8qqexzWvI$4Xex!6CvVd3V+@+?s8cR^3F@)}CRF2& zOune2&-iRIqpm*V+sTHy;*yC_<MyGcTt7Kc*PYR2@=9HI#&459>gqGGF;7;~D`Wh> zd8XcfCdU7hXBzf1wr<um@@EA3vC6oQ@&9H{lkH55D<&T_b7y=onbX{z@y+Bwb8*JQ zlQYfTB^g*Dj$z_}&@ewfoP5$;pK;FQpXU9HwVOLF;yD>bCcktvXFN4o(aE0i+vY^4 G<%|HkfNw4U delta 416 zcmeC^VC?8%+`uV4nNeA6bD(q)qmX`XUWtCPerR!OQL%nnPJU75WLass&4*=788?5E zb>fobW?=vWK`_a{z{SA8Ai}`FU@|#SL!9Y0^W-dzeN5k(CTnTBF}h7I)Qo3($u#+r zrW+&2WJxV|#?Hx!TH=fylPk62B_}gO%*bJc&@iKJPyVQ-&zLb;Q9GXT^yEfuajAt+ zl~>SIK46->NxP3xVX~u6x#R_?%L<rKjXN~?qK-b}mdT8|`i#3L8|sQn>O+m&ho-W2 za-yy~qtN7)y6%ieCV$k`XS%{PSxK*q@$BZAdjFXi&rY6c*v}ZeS<}d$5#+}z<37f- zn>kIkGclG;K4|97xNb71xjW;l$${qLj1wnkn!8K>gF1?d1JzOMC!aLeXUv-X)4ZS2 edvm8nJSU^j<d=@-j3*{5I@vRR*_`OKoDl$k|755D diff --git a/src/bptree.c b/src/bptree.c index c9bf2b6..5a216d5 100644 --- a/src/bptree.c +++ b/src/bptree.c @@ -5,7 +5,7 @@ #include <stdio.h> #include <stdlib.h> -#include "sorted_array.h" +#include "Array.h" // static bool has_minimum_keys(BPTreeNode *node); static bool has_maximum_keys(BPTreeNode *node); @@ -15,30 +15,27 @@ static bool has_maximum_keys(BPTreeNode *node); // } static bool has_maximum_keys(BPTreeNode *node) { - return node->keys_length == 2 * node->order; + return node->keys->size == 2 * node->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 = (uint64_t *)malloc(sizeof(uint64_t) * (2 * order)); - root->data_length = 0; - root->data = (uint64_t *)malloc(sizeof(uint64_t) * (2 * order)); - root->children_length = 0; - root->children = (BPTreeNode **)malloc(sizeof(BPTreeNode *) * (2 * order + 1)); + root->keys = IntegerArray_init(2 * root->order); + root->data = IntegerArray_init(2 * root->order); + root->children = BPTreeNodeArray_init(2 * root->order + 1); return root; } void bptree_destroy(BPTreeNode **root) { - for (int i = 0; i < (*root)->children_length; i++) { - bptree_destroy(&(*root)->children[i]); + for (int i = 0; i < (*root)->children->size; i++) { + bptree_destroy(&(*root)->children->items[i]); } - free((*root)->keys); - free((*root)->data); - free((*root)->children); + IntegerArray_destroy(&(*root)->keys); + IntegerArray_destroy(&(*root)->data); + BPTreeNodeArray_destroy(&(*root)->children); free(*root); *root = NULL; } @@ -48,108 +45,117 @@ void bptree_print(BPTreeNode *root, int depth) { printf(" "); } - array_print(root->keys_length, root->keys); + IntegerArray_print(root->keys); - for (int i = 0; i < root->children_length; i++) { - bptree_print(root->children[i], depth + 1); + for (int i = 0; i < root->children->size; i++) { + bptree_print(root->children->items[i], depth + 1); } } bool bptree_search(BPTreeNode *root, uint64_t key, uint64_t *data) { if (root->is_leaf) { int index; - bool found = sorted_array_search(root->keys_length, root->keys, key, &index); + bool found = IntegerArray_binary_search(root->keys, key, &index); if (found) { - *data = root->data[index]; + *data = root->data->items[index]; } return found; } - int child_index = lower_bound(root->keys_length, root->keys, key); + int child_index = lower_bound(root->keys, key); - if (child_index < root->keys_length && root->keys[child_index] == key) { + if (child_index < root->keys->size && root->keys->items[child_index] == key) { child_index += 1; } - return bptree_search(root->children[child_index], key, data); + return bptree_search(root->children->items[child_index], key, data); } // Insertion +static void redistribute_keys(BPTreeNode *left_node, BPTreeNode *right_node, int left_index, int right_index); +static void redistribute_children(BPTreeNode *left_node, BPTreeNode *right_node, int left_index, int right_index); +static uint64_t split_internal(BPTreeNode *node, uint64_t key, BPTreeNode *right_child_node, BPTreeNode **right_node); +static uint64_t split_leaf(BPTreeNode *node, uint64_t key, uint64_t data, BPTreeNode **right_node); +static void grow(BPTreeNode *root, uint64_t median_value, BPTreeNode *split_right_node); +static BPTreeNode *find_leaf(BPTreeNode *root, uint64_t key, BPTreeNodeArray **parents); +static void insert_full(BPTreeNode *root, BPTreeNodeArray *parents, BPTreeNode *node, uint64_t key, uint64_t data, BPTreeNode *previous_split_right_node); +static void insert_non_full(BPTreeNode *node, uint64_t key, uint64_t data, BPTreeNode *previous_split_right_node); + static void redistribute_keys(BPTreeNode *left_node, BPTreeNode *right_node, int left_index, int right_index) { - for (int i = right_index; i < left_node->keys_length; i++) { - array_append(&right_node->keys_length, right_node->keys, left_node->keys[i]); - array_append(&right_node->data_length, right_node->data, left_node->data[i]); + for (int i = right_index; i < left_node->keys->size; i++) { + IntegerArray_append(right_node->keys, left_node->keys->items[i]); + IntegerArray_append(right_node->data, left_node->data->items[i]); } - left_node->keys_length = left_index; - left_node->data_length = left_index; + left_node->keys->size = left_index; + left_node->data->size = left_index; } -static uint64_t split_leaf(BPTreeNode *node, uint64_t key, uint64_t data, BPTreeNode **right_node) { - int virtual_insertion_index = lower_bound(node->keys_length, node->keys, key); - int median_index = node->keys_length / 2; +static void redistribute_children(BPTreeNode *left_node, BPTreeNode *right_node, int left_index, int right_index) { + for (int i = right_index; i < left_node->children->size; i++) { + BPTreeNodeArray_append(right_node->children, left_node->children->items[i]); + } + + left_node->children->size = left_index; +} + +static uint64_t split_internal(BPTreeNode *node, uint64_t key, BPTreeNode *right_child_node, BPTreeNode **right_node) { + int virtual_insertion_index = lower_bound(node->keys, key); + int median_index = node->keys->size / 2; uint64_t median_value; *right_node = bptree_init(node->order); + (*right_node)->is_leaf = false; if (virtual_insertion_index < median_index) { - median_value = node->keys[median_index - 1]; - redistribute_keys(node, *right_node, median_index - 1, median_index - 1); - int insertion_index = sorted_array_insert(&node->keys_length, node->keys, key); - array_insert_at_index(&node->data_length, node->data, insertion_index, data); + median_value = node->keys->items[median_index - 1]; + redistribute_keys(node, *right_node, median_index - 1, median_index); + redistribute_children(node, *right_node, median_index, median_index); + int insertion_index = IntegerArray_insert_sorted(node->keys, key); + BPTreeNodeArray_insert_at_index(node->children, insertion_index + 1, right_child_node); } else if (virtual_insertion_index > median_index) { - median_value = node->keys[median_index]; - redistribute_keys(node, *right_node, median_index, median_index); - int insertion_index = sorted_array_insert(&(*right_node)->keys_length, (*right_node)->keys, key); - array_insert_at_index(&(*right_node)->data_length, (*right_node)->data, insertion_index, data); + median_value = node->keys->items[median_index]; + redistribute_keys(node, *right_node, median_index, median_index + 1); + redistribute_children(node, *right_node, median_index + 1, median_index + 1); + int insertion_index = IntegerArray_insert_sorted((*right_node)->keys, key); + BPTreeNodeArray_insert_at_index((*right_node)->children, insertion_index + 1, right_child_node); } else { median_value = key; redistribute_keys(node, *right_node, median_index, median_index); - int insertion_index = sorted_array_insert(&(*right_node)->keys_length, (*right_node)->keys, key); - array_insert_at_index(&(*right_node)->data_length, (*right_node)->data, insertion_index, data); + redistribute_children(node, *right_node, median_index + 1, median_index + 1); + BPTreeNodeArray_insert_at_index((*right_node)->children, 0, right_child_node); } - // TODO : Linked List - return median_value; } -static void redistribute_children(BPTreeNode *left_node, BPTreeNode *right_node, int left_index, int right_index) { - for (int i = right_index; i < left_node->children_length; i++) { - array_append_BPTreeNode(&right_node->children_length, right_node->children, left_node->children[i]); - } - - left_node->children_length = left_index; -} - -static uint64_t split_internal(BPTreeNode *node, uint64_t key, BPTreeNode *right_child_node, BPTreeNode **right_node) { - int virtual_insertion_index = lower_bound(node->keys_length, node->keys, key); - int median_index = node->keys_length / 2; +static uint64_t split_leaf(BPTreeNode *node, uint64_t key, uint64_t data, BPTreeNode **right_node) { + int virtual_insertion_index = lower_bound(node->keys, key); + int median_index = node->keys->size / 2; uint64_t median_value; *right_node = bptree_init(node->order); - (*right_node)->is_leaf = false; if (virtual_insertion_index < median_index) { - median_value = node->keys[median_index - 1]; - redistribute_keys(node, *right_node, median_index - 1, median_index); - redistribute_children(node, *right_node, median_index, median_index); - int insertion_index = sorted_array_insert(&node->keys_length, node->keys, key); - array_insert_at_index_BPTreeNode(&node->children_length, node->children, insertion_index + 1, right_child_node); + median_value = node->keys->items[median_index - 1]; + redistribute_keys(node, *right_node, median_index - 1, median_index - 1); + int insertion_index = IntegerArray_insert_sorted(node->keys, key); + IntegerArray_insert_at_index(node->data, insertion_index, data); } else if (virtual_insertion_index > median_index) { - median_value = node->keys[median_index]; - redistribute_keys(node, *right_node, median_index, median_index + 1); - redistribute_children(node, *right_node, median_index + 1, median_index + 1); - int insertion_index = sorted_array_insert(&(*right_node)->keys_length, (*right_node)->keys, key); - array_insert_at_index_BPTreeNode(&(*right_node)->children_length, (*right_node)->children, insertion_index + 1, right_child_node); + median_value = node->keys->items[median_index]; + redistribute_keys(node, *right_node, median_index, median_index); + int insertion_index = IntegerArray_insert_sorted((*right_node)->keys, key); + IntegerArray_insert_at_index((*right_node)->data, insertion_index, data); } else { median_value = key; redistribute_keys(node, *right_node, median_index, median_index); - redistribute_children(node, *right_node, median_index + 1, median_index + 1); - array_insert_at_index_BPTreeNode(&(*right_node)->children_length, (*right_node)->children, 0, right_child_node); + int insertion_index = IntegerArray_insert_sorted((*right_node)->keys, key); + IntegerArray_insert_at_index((*right_node)->data, insertion_index, data); } + // TODO : Linked List + return median_value; } @@ -157,30 +163,48 @@ static void grow(BPTreeNode *root, uint64_t median_value, BPTreeNode *split_righ BPTreeNode *left_node = bptree_init(root->order); left_node->is_leaf = split_right_node->is_leaf; - for (int i = 0; i < root->keys_length; i++) { - array_append(&left_node->keys_length, left_node->keys, root->keys[i]); + for (int i = 0; i < root->keys->size; i++) { + IntegerArray_append(left_node->keys, root->keys->items[i]); - if (root->is_leaf) { - array_append(&left_node->data_length, left_node->data, root->data[i]); + // if (root->is_leaf) { + if (left_node->is_leaf) { + IntegerArray_append(left_node->data, root->data->items[i]); } } - for (int i = 0; i < root->children_length; i++) { - array_append_BPTreeNode(&left_node->children_length, left_node->children, root->children[i]); + for (int i = 0; i < root->children->size; i++) { + BPTreeNodeArray_append(left_node->children, root->children->items[i]); } root->is_leaf = false; - root->keys_length = 0; - root->children_length = 0; + root->keys->size = 0; + root->children->size = 0; - array_append(&root->keys_length, root->keys, median_value); - array_append_BPTreeNode(&root->children_length, root->children, left_node); - array_append_BPTreeNode(&root->children_length, root->children, split_right_node); + IntegerArray_append(root->keys, median_value); + BPTreeNodeArray_append(root->children, left_node); + BPTreeNodeArray_append(root->children, split_right_node); } -static void insert_non_full(BPTreeNode *node, uint64_t key, uint64_t data, BPTreeNode *previous_split_right_node); +static BPTreeNode *find_leaf(BPTreeNode *root, uint64_t key, BPTreeNodeArray **parents) { + BPTreeNode *current = root; + // TODO : 10 is not enough. + *parents = BPTreeNodeArray_init(10); -static void insert_full(BPTreeNode *root, int *parents_length, BPTreeNode **parents, BPTreeNode *node, uint64_t key, uint64_t data, BPTreeNode *previous_split_right_node) { + while (!current->is_leaf) { + BPTreeNodeArray_append(*parents, current); + int child_index = lower_bound(current->keys, key); + + if (child_index < current->keys->size && current->keys->items[child_index] == key) { + child_index += 1; + } + + current = current->children->items[child_index]; + } + + return current; +} + +static void insert_full(BPTreeNode *root, BPTreeNodeArray *parents, BPTreeNode *node, uint64_t key, uint64_t data, BPTreeNode *previous_split_right_node) { uint64_t median_value; BPTreeNode *split_right_node; @@ -193,11 +217,12 @@ static void insert_full(BPTreeNode *root, int *parents_length, BPTreeNode **pare if (node == root) { grow(root, median_value, split_right_node); } else { - BPTreeNode *parent = parents[*parents_length - 1]; - array_delete_at_index_BPTreeNode(parents_length, parents, *parents_length - 1); + BPTreeNode *parent = parents->items[parents->size - 1]; + BPTreeNodeArray_delete_at_index(parents, parents->size - 1); if (has_maximum_keys(parent)) { - insert_full(root, parents_length, parents, parent, median_value, 0, split_right_node); + // 0 is passed instead of data because the recursion is necessarily done on an internal node. + insert_full(root, parents, parent, median_value, 0, split_right_node); } else { insert_non_full(parent, median_value, data, split_right_node); } @@ -205,51 +230,30 @@ static void insert_full(BPTreeNode *root, int *parents_length, BPTreeNode **pare } static void insert_non_full(BPTreeNode *node, uint64_t key, uint64_t data, BPTreeNode *previous_split_right_node) { - int insertion_index = sorted_array_insert(&node->keys_length, node->keys, key); + int insertion_index = IntegerArray_insert_sorted(node->keys, key); if (node->is_leaf) { - array_insert_at_index(&node->data_length, node->data, insertion_index, data); + IntegerArray_insert_at_index(node->data, insertion_index, data); } if (previous_split_right_node != NULL) { - array_insert_at_index_BPTreeNode(&node->children_length, node->children, insertion_index + 1, previous_split_right_node); + BPTreeNodeArray_insert_at_index(node->children, insertion_index + 1, previous_split_right_node); } } -static BPTreeNode *find_leaf(BPTreeNode *root, uint64_t key, int *parents_length, BPTreeNode ***parents) { - BPTreeNode *current = root; - *parents_length = 0; - // TODO : 10 is not enough. - *parents = (BPTreeNode **)malloc(sizeof(BPTreeNode *) * 10); - - while (!current->is_leaf) { - array_append_BPTreeNode(parents_length, *parents, current); - int child_index = lower_bound(current->keys_length, current->keys, key); - - if (child_index < current->keys_length && current->keys[child_index] == key) { - child_index += 1; - } - - current = current->children[child_index]; - } - - return current; -} - void bptree_insert(BPTreeNode *root, uint64_t key, uint64_t data) { - int parents_length; - BPTreeNode **parents; - BPTreeNode *leaf = find_leaf(root, key, &parents_length, &parents); + BPTreeNodeArray *parents; + BPTreeNode *leaf = find_leaf(root, key, &parents); // TODO : vérifier si la clé existe dans leaf. if (has_maximum_keys(leaf)) { - insert_full(root, &parents_length, parents, leaf, key, data, NULL); + insert_full(root, parents, leaf, key, data, NULL); } else { insert_non_full(leaf, key, data, NULL); } - free(parents); + BPTreeNodeArray_destroy(&parents); } // Deletion diff --git a/src/bptree.h b/src/bptree.h index 05fdd19..dcf15be 100644 --- a/src/bptree.h +++ b/src/bptree.h @@ -4,15 +4,14 @@ #include <stdbool.h> #include <stdint.h> +#include "Array.h" + typedef struct BPTreeNode { int order; bool is_leaf; - int keys_length; - uint64_t *keys; - int data_length; - uint64_t *data; - int children_length; - struct BPTreeNode **children; + IntegerArray *keys; + IntegerArray *data; + BPTreeNodeArray *children; } BPTreeNode; BPTreeNode *bptree_init(int order); diff --git a/src/bptree.o b/src/bptree.o index 294a237e01ba5f0ef580c048fb095a908abe53f8..71e13d20252ef1ac8af21af0cd1eb6319323c44e 100644 GIT binary patch literal 92496 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 literal 85120 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 diff --git a/src/main.c b/src/main.c index ee5ea62..70b5b9a 100644 --- a/src/main.c +++ b/src/main.c @@ -4,20 +4,34 @@ #include <stdio.h> #include <stdlib.h> -#include "Directory.h" -#include "DirectoryRecord.h" #include "bptree.h" -#include "sorted_array.h" int main() { - BPTreeNode *index = bptree_init(2); + BPTreeNode *root = bptree_init(2); - Directory *directory = Directory_init(); - Directory_insert(directory, DirectoryRecord_init("0794592180", "Florian", "Burgener", 2000, 10, 03)); - Directory_insert(directory, DirectoryRecord_init("0799494969", "Daisy", "Luna", 1995, 05, 31)); - Directory_print(directory); + uint64_t input[] = {8, 12, 11, 47, 22, 95, 86, 40, 33, 78, 28, 5, 75, 88, 21, 56, 82, 51, 93, 66, 48, 70, 57, 65, 35, 4, 60, 41, 49, 55, 68, 72, 23, 31, 30, 42, 18, 87, 24, 58}; + IntegerArray *keys = IntegerArray_init(40); + for (int i = 0; i < 40; i++) { + IntegerArray_append(keys, input[i]); + } - Directory_destroy(&directory); - bptree_destroy(&index); + IntegerArray_print(keys); + + for (int i = 0; i < keys->size; i++) { + bptree_insert(root, keys->items[i], keys->items[i] * 1000); + } + + bptree_print(root, 0); + + for (int i = 0; i < keys->size; i++) { + uint64_t data; + bool found = bptree_search(root, keys->items[i], &data); + + assert(found == true); + assert(data == keys->items[i] * 1000); + } + + IntegerArray_destroy(&keys); + bptree_destroy(&root); return EXIT_SUCCESS; } diff --git a/src/main.o b/src/main.o index ca2341be399e9bed35f53bf070ec7056618708e1..b1839b18fd5461fd48e0738adc6f4a6e0635f226 100644 GIT binary patch literal 21416 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 WA4ndCL4852`k@XlM$>@CWdH!56=u!= literal 14248 zcmb<-^>JfjWMqH=Mg}_u1P><4!0<v3!FB*M9T=1ulo*T@jExj56f6`n^HNePtPG76 z%uEz46by|NQZkEDlS}f8Dy<An!5Xj<PNhZZsd=eISS5)Nbj!&v%1q27LM3)32IiI~ zrj|yA76#bm35oiY<|PtRgHPTiF|)W5p8^7M2IiKQCYC0aW|jmL;*kE#FZata+%e2C z)G;J9*rV~y3<d^<ZdQ<LkKPy+0guiY6^_;e{H^mD85lfzArhT;J&rSP?%L|OpNWBi z!K2fe!{gvvW{+Ohb^rhW_vx)x@aS|F@abLLz`($8yp^HhfBnagA3q*%Woh_d&+zHf zr{k?0AlB#4pHn=#SyVN^hP0@3FfcF}9(Vz=+o$uF$H7<34ZA>^8Teb97#SFRdW#)A zJ6%*3K-Ktme)T-~mf5jkFH}(|BLjouPG$xM2FD#-ATxWx32)~Gc97FWLFRh&+JY#M zF%XMjx;;9N@wf6YGB9{{*Qh|HcFKc|0{PhkYSd{AqrlEZF=ZbEiYajC%|j9Q>HH4X z>eKljOnX?ysBn}9c|gJo<Va{JfjrU;37ixUV@PO~)_OD^0mYQzf#_Jr7{^%0ILG+I z`x6)#7$AnV9`N9Iz46lf-~ay}JHA4J$8lypvj?soo!}^e7!Q*2=yt9+#=!7;2Et7+ zx1rMzw}S0R<Ck|~U;w2bkLEWVU?DKEj}7EvNH}{mAK`cj@{5+9kFya&ZenJhUNQrS zV+tk>!K4|OGzOC<Ak|nf2UHAF_CPr#P#{Nvl#{EU6Qr4efq`88+yks1l!!r2Al3b# z_(hIUaBPAMLc^Qb7#LW<VjSS=g9psULV!vP2BwSRpsdNv!46Wv%mSuZIG7p1(ag*Q z<})*bBaN8}>~>Zb*37&T24)U04{Qpvt~AIL2z!QP1_J{FggsLl#Af4|$-uw>HH96- z2Ah6^#gIdXiGcweqb$bk;Nly?G2@)fz`(!(;h2Lt0uYV`m?Ht<Sb{kU5RMg?qXFSq zgE<Bejt!V&0pZw!ISvqx1DN9h;W&ah0T7N8m=givxQMwjF)$=RIBp`|ObiSe5RM1f z)ddiaCzw+L;dpUZGcYhzKsdfaJ`4;D4G@kWe=q|BLlcDK&k@MPz|aig1o9^`F)(yM zIFY>V3=9ktAe?CN93}>a84ym4WH}Q9!vY8=7VMlA5KbJYGXn#|1_&pfOOt_tVF!eh z0Cw8}2q%f7mWhGk2qcnN*(H}UFff41X$BT;K5+hE<8WYNU|{0_N$`Lo4CF3eP#l9q zEtnV>pvuw_%pxWR2C&**CI$wuT44r01_lNOwobm8VADX64H4-Ai$K`j2sXPE4=54v z++<>4ILE}mz|X*b7_4&v0|Nv5WhMrQf$Y*!AX#V%gr;3^l5*i-5eQ+1CMgb9E)bgm z>}L)(t`uel25tz49n66w91adnkfo61!NCdU*g%wVfjJHkZ-KOfy~PFLmoP)UDFO*c z4sPZjObiTQcL;E@39Nv*gOeR>48$Fr9O57e4hA-kb<Ci^1Q`R)ES#Lo4b0Gt!zC?} z56S?b;IrUn7jR;M`iUFjScqBNoLnFY7O-QvA&!OQ8E$TVPZkCSNS@*50oxDBGu*sj z8Hm@p`M@%eJj2Z|>CeKzV8Fo42zCz}#{sYdLs>x1JOgtYw*WJUEdX*FBM&Pm=s-*m zwgT&8U|^hM#>T)P2ohrC6-2Q41#H+D7=%FLAne4(z_5dbfkButl+lPm1SAB)e#mN~ z*ccf2S;1;JLG1~U0tR8m5M)juGAD?c>jJwlV+5m>Fk>X6F~Zn1bYs&<H1;&uSW}R( z{;0;nonC}&M;#jj!wiTWOm#@!?qXwL*Z>u;M-rdL#=vj_DvqokB>n)0_zx`N3)vVL z1lYhqhGH*BTmvdz&w%j38c^ZR#t{vU<}J(&4B++|D4@B8c;ReLZXP(BgI5U7=Hz2T zuz8W#JP0<oFq;_2JP_t#Kw^r6M8KF)kWrOSn46hTnlDsbkWoOKfq_Ykftk;W+nU>w z+f$f<fmwxto7;|?nU8^ig`a_&n}LB9D#F3Qzy=ZlsbW`S08t#mjLdx8+z{Q2!VC<Y zyhw&wa5FG)Axvjr;1*_J=ChGxVBle7^b`iE=T&6z6xQcvVBj-B(r7OUQpB&wz`!7& z$7nB!aGxNf5W9oKG$%=rW<g{<3=Be@O^l3!jD}!?g}a&<8JHv{I!Q1vh;%kFGJqr) z7)13LK!)e>!Hi^J5JMGWU=T+LFfcIaz$#fti31Kr5CO}CAT}xZ5F-NvGlLBy0|O)D zZ$4fIMn-UF6vWprEiTf}$xPBuPfpgaurP}^Gtte-%qy+XP0uUUx75$fOU@}xNo4@5 zgK{v{C1sWr6QM-Eq_Q9tRUrcdw7tr}z))P0l9HOHmjUV<gH`HffQsMZlA_Y&l6W^y zA6LB$24)5Z1gp3tB{N?y1Jo!gt}KpEEh@^%EG~g)bAfe@gHn_8i&FGJtrZ5iAcPCj zpI4$=nweLU2ho*OP*Rkd3X!!*D$UF((ap@W0|z!M4+AH(6l7pv=4NDL(iLKr<Pc`% z31=02%F5%(%F4!MBg`tv#>grd!79LE$13Q-%E}hSD#OOeDp118%Hho_z@#R~%E}hW z@s!C;n4_$@nU#l)xr~vOk(rxg4J!|GDU&)QD=U+uL}MeXKqISQ11lplR}+&F10!R6 ze12M5d<jFmr+<7=YGO)!K}iuqd~!x&W*$RvW>qRksyHLRs3fU0jUg$ss3apkC9xzm zJ|(e|Avq&6C#5JgFFq$VFTEs#AwE8_I5982D77HJs3g9)B)=%t0&H+nX<B?zVsR=% zPJUjx0+=YxE6z;MOHEM#H4XENQc{Z;ic5>~5_3}-;*;}JQj^O{kW_;dLDeT`Bo;Bm zr)B1(=H-J82fI2oF9o6;q%uA&Co#PkED5q1Bp07tS`?q0pHrHf2Ns7}f#jpgRFJ{> zIVqqJDNZe6fYYA-@wtgb*&rvDq-5qXptwCgttd6MD782q6hKY^Aw{XFe)%a-ucE5- z^p7tu$}C9*hcVczMc`Ca%m7Mfd8tK33@M2vi45TIRzT4UACh6nERN4fO-uv(qByZE z6%w!o8Toms@p+}WNvTD!#2=rNpPbDA2@E5K_*{^yic3=ROG^+b7LttPGxIW$1miRF zic^b_1yWLrON#O<!Inb2018x43O6$Wr4Ubluw_stC@V2Q(mcfE_;_%l&&-QQO(Hq@ zi76Hg*{PMq4Ds=B(?Ed%&2$XVfG-9I3@n|&^BX(`GQ>OO=jR|I2AoKc;x;!wuOtH+ zuHX~`ii*q>P%<t_WQZ>-NleN~g~d16`SJ0^C5g$|@yQw4@o9;fIWYggLIUJyn0vss zfk)98aQPIL89;WxgAAN<!TAD|`@oS23RbxH;tPtvj*Tx!OfhAMFU>10PE9cam1v-( z0#^o!LvY+AB_?N=7C@2&G;P5gsh^uyqMxiETAW%`te*xNd((GGEzT~<FVHVe&dATt z(S@fm{o<lz26w+u1!qHZ1xq~>Jp%>Z+>+9~R9o<XUuLp`Zf;^xa)xb%g_*9IiGpsr zg06pBVsVLrZd!3-US>&VRjO@bN=i{`aWS$`PHJMdf^J%3ab;d|Mp1rVerd68X<m6| zUWzU_0>Fwvp{`p{lwSfKg46}2yS#LeDPW1@oW$Y`m~>`-o`P;#avBn!0iGQ}Wi~^6 zIXsf#!39Z@pb7#UWRT<xi3ODM3z9e)+?}1R6f{DUO7lueA%UT5SPJGD))^V-8JOr9 zYC^=p<vFA;4QlLydb{p^p`gm<0H}WrYmLGhe~eW@42%^5jM6;p91}o;WDE=pGEg(X zb+Q|uKtGccpF|(C6Q4paixZzl533`eK^vPRpG7mfJKqIH=2eVbd=}1p29A6hPJ9YZ zd=gH40#1A!j-bvK$PGDA^I$D52~ejJDy9yiJ@^Eo_`p375DzP6WB~c;<9}?D%%EBo ziv%;s*I312p@1sM461BVg}^*!22d!1nJ5G^1E>v(A_V3zqqS|of}o)UNdE`Mh11NC zZYi7(Vt_(}2}v9lb|5)s23`<_f<bLkCI&VJPzM+!0S;FX18grpl!Zz$LpnRCf?)N+ z7-Ap+W<={7#D!yKMB^AP24XNXfMOcNLdDDsQm6t@9y2`UK?R@`GlMLYg-S6q$e{`_ zFfgcrML;PX%s?TS8KhD8AdWVuQ4C_BVMhi~9|sY?;Jm=Vz~F{MJ!k>~l-ALVVE~Ou zV-uf(!<@x9#CPBjKZ!&9CJyn}IK+S95a(lLV8G^nWgOxrIK=&Mh)3ZNuf`z`Z&nnS zCdIqN8yFZ^TE-hN#Dln=P_7|^o{zHutRV=gL30yxa`Kbo4Z-?hQuzfXnfZC~DXE}h z9$M9w7N^E1rj?`?#TTWPlosVN#Jl_WJ30Eq`@6XXyN1MvI6C>b#=|ONj3x_m3kFgp zLP~n%f*-9}1F2sT3SgBxwCw`pVr#UZiovUQh?kRLjRvTy(!8S7^vq(A*V1$HlM-`4 z?HzDi8SD$Fs<PCgVo;#uW)|lrmLzAyCugK4XUCUWzyb}!5O9(Ql|LW`s22gMKmPoO z0NAt`NE}oez{EiVr6Bd7oC?atF!AjmL2y~mzyO*)fr;OTii6An<w_eUAC#U!Oqe)K z{U?whw66(LUjya;fzlv*6&M&8VCuy|6%5o~P)8Xit_2l`n-A4*h9<rTDsGD=4(geL zq@1AQ==R1Ui6h%viX^Ut<jz_oab+a&RwQv1B=Ji~;-FF&<}X2zhoJsdMN%(`LtGJu zxF(V~sO*KAZ-_(O3`rbRN5Ry4B8h{>e_`T&Na9*Z?u>$pgDB8IB20ZUNC4_DP}vR> z2gLyhgMtH;9$@nrpfm{+2i3VCHVA{#28af!2Z@99fcP+dAaSr5h{3?X5CM{8U;wv7 zK<Z&NG-yf<Bn46i5(n!+YX5-5VPYV4ph-Cp4H5^bht<TOp=4xnn4SY5L8!eTF$a)F z1_p*3Na7%KB%%BVP#UBRBo5L876J(%nFE@71&K=_iG$RG@+3%H0Zklc4$OX#G)N5Q zz6g*2)O?URpfm?ECjm_yqz5DpoBshtCvyCPhi9Sj3!3-E7Qf&*0gxd`7-S7-RtVNU zg4qL7i(J3K>;;K~+Q^ci49fr=7KY9@fW)tW3}irzI>OYygf=Z<;SCap4;?cwFu?o` z5{Jbt$eEzD4WdEfAoD?GD2Q(XB9QEjgxYJ5CJw51K|&rN0!jT@PyjM8F!-a1Pl1{f zh9<rW%8!N8F!#KHnv;ztej3UzfYLDa9Z>bKau+5JRR(Ssf!HwdJZQMh0SO|x-vuhZ z3{5-$YW`+4@heb1EZxD(2c<cX)L9ULWIkxJ9VB!ML?DS*K<#~wCjJ+i9=@Q7XG6mi zJo<=ajvmyVpmr2U3(P&R2?%MZKA8AzkRk>K1`Ravolw3hl!mE41$8H^eu0U%LB;*i z)X#^yCk9O%*1yO^6W<1PPZ^r{Lnyx)O2h2shw?#vNsv~UI4m6JLgiuNEKql@LK6qo zZ6N*I(Zp{<`A48M%p6!aUPKdzwKMLaiQj|9<7+hW3sCVNXyT4gJ}Wf*VD>JCx?c!Q z{3TSqJev3_sCr#Aabc*qC7L*B1{V|#j%ebb_BTj815NxhNDwsOj3)jK%I|~HF!$?0 z-MIiw{5@2B4Vw67s5^I{iMK)3-$xUl4CTLt(lC2r`TPr-IBX@>Pc-peP<z>+G|Zgi zP<vtF2NSP^iYuV0?}mntE}A%OV8IGa{5I4b?r7q=P;*Mr#9{7iL=)cvHKz|v{1%iy z8%o36Uk7#nRy1*#IS0|iZJ_3#MH2`0yFgBb*#k4b6(q>O!0;SR{YI$0U(m!YpnOJX z{(za&47HaJO?(AZTpCThA8Nh^nmDXIZ;B?q4{DApn)q?3cnq32%)c3E;y<ALVkixA z2B<v%4F-lTs5s1Do>2czLla*P(#XKTum~y+;)2YX4mD^en)q(0_%Sqba6^%Sf#Eii zIH*kmYj?ds6Nj}szoLmljb{*m4pG6}11k?@(Zt<A3K$p|jF7}Z_QKk2_GscTclw}- z!|K;`BymtUBtp$EK@*4N$3`^qMyUFkXyTnv@r`KWqR@Chi6$-!6@Q2(t_l_Zi6#y! ze+5CFhqg;W?l*<1*F+PCjsG}9#bN0r5~|)EhqynQ_)BQ~1>+EpMic)A4TpFf;^}DO z+)(#q;}9=K6Q2xC=jAxW>(RtzpyoH@5bs74*Myqik3)Pqnm7+Mo@S$or$X&rgeDGJ zpajYT%h1IAq4ust6PJLBZ^R)E6$Y;>LLN1R^$|eP0ZJzzJCQNEIIO)16NjZAZ;${| zdV`q(>u-X*iEKWsT@4Zkr8$`T7AONG4pI;6*D&Z6SLT)^CNbz0mlQ$h3>d2<wW5SU z4?MZ2msDKLpjVU+;($~d>RG_J40=VWIf;58#d^ghiA5!)1u!XyN<*j$u->B79KD?U z<is4PAXr;!MP><<pO%@I8J}2Glvt?;9;<^2XXa&=U=dD9O)5=~&&*59XV8PN6O)pP zQp=#aph887dFiPj=Y!k{5yK*slbM$aGo`qsh(RwoKQ}iuuY^G_FTW&J&)qLn7d%b| z<)`PB>J=2_7o--IR6?yw&4^Dc0?h?O!<rHbH1Z6JdRY2`nFTA?VSE@3QVU~)XwcXY zNDP{MK|)|mtbWi~3n)#Js~@y(17yDu*j5AqvmazWLKM2544TeC;?__$D7}LCFbu2j z8bF4_1Q{3@VEF+i1nSp<l%R(nY>Ef8q7SAPM8onchz-J^1%{xa7v^4&7zlGfJKC`J zFUVey9iXrR$-~BnK>cKp{pkKr2N}x1zyKO+0;z{#kXjHMMrT3&j~@ODp!x~<KNULW zf$shlputnn;z_7QAop{^*5ENPz-M6Uq4tCP267h+D?kNc{XdvEdiYi0us;H1Ap>ar z9YiOH3!3*s55Il}1_n@hitc|4sQobY5K|E82PWQy!~PDCg-HGcaY18mFnzH21C1Ym z7H*>3??9ye3vt-L0AwMW{UCp$+rJkY{xJW+Xb-6U+n_W|92%W4E(2)(2b5IM<9`Rt ze(1mzhzlAcL$@C^PlRqJ$nbwqeMV@KXk3OnINWal3RI-{2bl@N==!hY2)_%Uf(1!G z$o-)4FLd{Rz+ry^)P9gYki9UBZa-+A09*JmKs$1<c?ys@prwB3_A`T4l)(%~q8p(0 zA49Vcjmz*4hyM+r_QTRC$bJwT-G0!x3dl^DJ7G?6gJx6(XuAm}4pIwZ!)Pg}`_c8M zK{Gxy8bDgW7^V+KgT@<RY_I|-F$t<4%7s(tYK<8g7(ne5^zwfOR6oeyaLq{N7fcM) zZUUK!u73wqKWy9_rXCi4Fg~c?gDw6&py3ayUqEU>?f@03F#Vvo0EuI>8zde8N-UuI z3S>9~0|Tg@2F<ge>j#y|=w%N`e*s7_0|UckkOd$CC`RLgXX>%(p8$0~XzvnKE0{vp F4*;WNrbPe% diff --git a/src/sorted_array.c b/src/sorted_array.c deleted file mode 100644 index 3e75b04..0000000 --- a/src/sorted_array.c +++ /dev/null @@ -1,126 +0,0 @@ -#include "sorted_array.h" - -#include <stdbool.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> - -int lower_bound(int array_length, uint64_t *array, uint64_t value) { - int low = 0; - int high = array_length - 1; - - while (low <= high) { - int m = (low + high) / 2; - - if (array[m] < value) { - low = m + 1; - } else if (array[m] > value) { - high = m - 1; - } else { - return m; - } - } - - return low; -} - -int sorted_array_find_index(int array_length, uint64_t *array, uint64_t value) { - int low = 0; - int high = array_length - 1; - - while (low <= high) { - int m = (low + high) / 2; - - if (array[m] < value) { - low = m + 1; - } else if (array[m] > value) { - high = m - 1; - } else { - return m; - } - } - - return -1; -} - -bool sorted_array_search(int array_length, uint64_t *array, uint64_t value, int *index) { - int i = sorted_array_find_index(array_length, array, value); - - if (index != NULL) { - *index = i; - } - - return i != -1; -} - -int sorted_array_insert(int *array_length, uint64_t *array, uint64_t value) { - int insertion_index = lower_bound(*array_length, array, value); - - for (int i = *array_length - 1; i >= insertion_index; i--) { - array[i + 1] = array[i]; - } - - array[insertion_index] = value; - *array_length += 1; - return insertion_index; -} - -void sorted_array_delete(int *array_length, uint64_t *array, uint64_t value) { - int index = sorted_array_find_index(*array_length, array, value); - - for (int i = index; i < *array_length; i++) { - array[i] = array[i + 1]; - } - - *array_length -= 1; -} - -void array_insert_at_index(int *array_length, uint64_t *array, int insertion_index, uint64_t value) { - for (int i = *array_length - 1; i >= insertion_index; i--) { - array[i + 1] = array[i]; - } - - array[insertion_index] = value; - *array_length += 1; -} - -void array_append(int *array_length, uint64_t *array, uint64_t value) { - array[*array_length] = value; - *array_length += 1; -} - -void array_print(int array_length, uint64_t *array) { - printf("["); - - for (int i = 0; i < array_length; i++) { - printf("%ld", array[i]); - - if (i < array_length - 1) { - printf(", "); - } - } - - printf("]\n"); -} - -void array_insert_at_index_BPTreeNode(int *array_length, BPTreeNode **array, int insertion_index, BPTreeNode *value) { - for (int i = *array_length - 1; i >= insertion_index; i--) { - array[i + 1] = array[i]; - } - - array[insertion_index] = value; - *array_length += 1; -} - -void array_append_BPTreeNode(int *array_length, BPTreeNode **array, BPTreeNode *value) { - array[*array_length] = value; - *array_length += 1; -} - -void array_delete_at_index_BPTreeNode(int *array_length, BPTreeNode **array, int deletion_index) { - for (int i = deletion_index; i < *array_length; i++) { - array[i] = array[i + 1]; - } - - *array_length -= 1; -} diff --git a/src/sorted_array.h b/src/sorted_array.h deleted file mode 100644 index 02f12fd..0000000 --- a/src/sorted_array.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef SORTED_ARRAY_H -#define SORTED_ARRAY_H - -#include <stdbool.h> -#include <stdint.h> - -int lower_bound(int array_length, uint64_t *array, uint64_t value); - -int sorted_array_find_index(int array_length, uint64_t *array, uint64_t value); -bool sorted_array_search(int array_length, uint64_t *array, uint64_t value, int *index); -int sorted_array_insert(int *array_length, uint64_t *array, uint64_t value); -void sorted_array_delete(int *array_length, uint64_t *array, uint64_t value); - -void array_print(int array_length, uint64_t *array); -void array_insert_at_index(int *array_length, uint64_t *array, int insertion_index, uint64_t value); -void array_append(int *array_length, uint64_t *array, uint64_t value); - -typedef struct BPTreeNode BPTreeNode; - -void array_insert_at_index_BPTreeNode(int *array_length, BPTreeNode **array, int insertion_index, BPTreeNode *value); -void array_append_BPTreeNode(int *array_length, BPTreeNode **array, BPTreeNode *value); -void array_delete_at_index_BPTreeNode(int *array_length, BPTreeNode **array, int deletion_index); - -#endif -- GitLab