diff --git a/src/BPTree.c b/src/BPTree.c index 479d7e1749cbf1dd44562be0831e7ccc92c76e4a..52f9a313e8acf85d3c47d6785b24d2022c5474a9 100644 --- a/src/BPTree.c +++ b/src/BPTree.c @@ -322,29 +322,29 @@ static bool is_sibling_left_side(BPTreeNode *parent, BPTreeNode *node, BPTreeNod static void merge(BPTreeNode *parent, BPTreeNode *left_node, BPTreeNode *right_node) { int index_in_children = BPTreeNodeArray_search(parent->children, left_node); - if (!right_node->is_leaf) { - IntegerArray_insert_at_index(right_node->keys, 0, parent->keys->items[index_in_children]); + if (!left_node->is_leaf) { + IntegerArray_append(left_node->keys, parent->keys->items[index_in_children]); } // Merge the keys. - for (int i = left_node->keys->size - 1; i >= 0; i--) { - IntegerArray_insert_at_index(right_node->keys, 0, left_node->keys->items[i]); + for (int i = 0; i < right_node->keys->size; i++) { + IntegerArray_append(left_node->keys, right_node->keys->items[i]); } // Merge the data. - for (int i = left_node->data->size - 1; i >= 0; i--) { - IntegerArray_insert_at_index(right_node->data, 0, left_node->data->items[i]); + for (int i = 0; i < right_node->data->size; i++) { + IntegerArray_append(left_node->data, right_node->data->items[i]); } // Merge the children. - for (int i = left_node->children->size - 1; i >= 0; i--) { - BPTreeNodeArray_insert_at_index(right_node->children, 0, left_node->children->items[i]); + for (int i = 0; i < right_node->children->size; i++) { + BPTreeNodeArray_append(left_node->children, right_node->children->items[i]); } IntegerArray_delete_at_index(parent->keys, index_in_children); - BPTreeNodeArray_delete_at_index(parent->children, index_in_children); - - BPTreeNode_destroy(&left_node); + BPTreeNodeArray_delete_at_index(parent->children, index_in_children + 1); + left_node->next = right_node->next; + BPTreeNode_destroy(&right_node); } static void steal_leaf(BPTreeNode *parent, BPTreeNode *node, BPTreeNode *sibling) {