feat(lsm): probably working trie insert

lsm
Jef Roosens 2023-10-14 14:53:42 +02:00
parent ef8129b8eb
commit 682f422e3c
Signed by: Jef Roosens
GPG Key ID: B75D4F293C7052DB
2 changed files with 17 additions and 10 deletions

View File

@ -1,3 +1,4 @@
#include <assert.h>
#include <stdlib.h> #include <stdlib.h>
#include "lsm.h" #include "lsm.h"
@ -101,20 +102,26 @@ lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
} }
// split_node replaces the original node as the new child node // split_node replaces the original node as the new child node
// bottom_node here is always the same value as next_node
lsm_trie_node *bottom_node; lsm_trie_node *bottom_node;
lsm_bt_replace((void **)&bottom_node, &node->bt, c, split_node); lsm_bt_replace((void **)&bottom_node, &node->bt, c, split_node);
// The old child node now becomes the child of split_node // The old next node now becomes the child of split_node
lsm_bt_insert(&split_node->bt, lsm_str_char(key, index + cmp), lsm_bt_insert(&split_node->bt, lsm_str_char(&next_node->skip, cmp),
bottom_node); next_node);
// The new node splits the edge into two parts, so the new node will have // split_node's skip has not been initialized yet, so we can simply
// the remaining part of the skip (minus the one character) as its skip // overwrite it with bottom_node's skip
lsm_str_substr(&split_node->skip, &next_node->skip, cmp + 1, split_node->skip = next_node->skip;
lsm_str_len(&next_node->skip));
// The new node splits the edge into two parts, so the new split node will
// have the first part of the skip (minus the one character) as its
// skip
lsm_str_substr(&next_node->skip, &split_node->skip, cmp + 1,
lsm_str_len(&split_node->skip));
// The old node keeps the first part of the skip // The old node keeps the first part of the skip
lsm_str_truncate(&next_node->skip, cmp); lsm_str_truncate(&split_node->skip, cmp);
next_node = split_node; next_node = split_node;
} }

View File

@ -13,7 +13,7 @@ void test_fuzzy() {
for (int len = 1; len < 25; len += 5) { for (int len = 1; len < 25; len += 5) {
for (int count = 10; count <= 500; count += 10) { for (int count = 10; count <= 500; count += 10) {
for (int i = 0; i < 1; i++) { for (int i = 0; i < 10; i++) {
counter++; counter++;
config.seed = rand(); config.seed = rand();
@ -30,6 +30,6 @@ void test_fuzzy() {
} }
TEST_LIST = { TEST_LIST = {
/* { "trie fuzzy", test_fuzzy }, */ { "trie fuzzy", test_fuzzy },
{ NULL, NULL} { NULL, NULL}
}; };