chore(lsm): some refactoring
All checks were successful
ci/woodpecker/push/docker Pipeline was successful
All checks were successful
ci/woodpecker/push/docker Pipeline was successful
This commit is contained in:
parent
e3aad2b5e4
commit
881f2defbe
9 changed files with 60 additions and 76 deletions
|
|
@ -45,7 +45,7 @@ lsm_error lsm_trie_init(lsm_trie **ptr) {
|
|||
|
||||
uint64_t lsm_trie_size(const lsm_trie *trie) { return trie->size; }
|
||||
|
||||
lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
|
||||
lsm_error lsm_trie_insert(lsm_trie *trie, const lsm_str *key, void *data) {
|
||||
// NULL is not allowed as a data value, as it's used to indicate a lack of
|
||||
// data
|
||||
if (data == NULL) {
|
||||
|
|
@ -78,18 +78,22 @@ lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
|
|||
// here
|
||||
if (res == lsm_error_not_found) {
|
||||
lsm_trie_node *new_node;
|
||||
res = lsm_trie_node_init(&new_node);
|
||||
LSM_RES(lsm_trie_node_init(&new_node));
|
||||
|
||||
new_node->data = data;
|
||||
|
||||
lsm_str_substr(&new_node->skip, key, index + 1, key_len);
|
||||
res = lsm_bt_insert(&node->bt, c, new_node);
|
||||
|
||||
if (res != lsm_error_ok) {
|
||||
lsm_trie_node_free(new_node);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
new_node->data = data;
|
||||
trie->size++;
|
||||
|
||||
lsm_str_substr(&new_node->skip, key, index + 1, key_len);
|
||||
|
||||
return lsm_bt_insert(&node->bt, c, new_node);
|
||||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
index++;
|
||||
|
|
@ -101,11 +105,7 @@ lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
|
|||
|
||||
if (cmp < lsm_str_len(&next_node->skip)) {
|
||||
lsm_trie_node *split_node;
|
||||
res = lsm_trie_node_init(&split_node);
|
||||
|
||||
if (res != lsm_error_ok) {
|
||||
return res;
|
||||
}
|
||||
LSM_RES(lsm_trie_node_init(&split_node));
|
||||
|
||||
// split_node replaces the original node as the new child node
|
||||
// bottom_node here is always the same value as next_node
|
||||
|
|
@ -118,7 +118,7 @@ lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
|
|||
|
||||
// split_node's skip has not been initialized yet, so we can simply
|
||||
// overwrite it with bottom_node's skip
|
||||
split_node->skip = next_node->skip;
|
||||
split_node->skip = bottom_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
|
||||
|
|
@ -148,7 +148,8 @@ lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
|
|||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
lsm_error lsm_trie_search(void **out, lsm_trie *trie, lsm_str *key) {
|
||||
lsm_error lsm_trie_search(void **out, const lsm_trie *trie,
|
||||
const lsm_str *key) {
|
||||
uint64_t key_len = lsm_str_len(key);
|
||||
|
||||
if (key_len == 0) {
|
||||
|
|
@ -199,13 +200,13 @@ lsm_error lsm_trie_search(void **out, lsm_trie *trie, lsm_str *key) {
|
|||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
lsm_error lsm_trie_remove(void **data, lsm_trie *trie, lsm_str *key) {
|
||||
lsm_error lsm_trie_remove(void **out, lsm_trie *trie, const lsm_str *key) {
|
||||
uint64_t key_len = lsm_str_len(key);
|
||||
|
||||
if (key_len == 0) {
|
||||
if (trie->root->data != NULL) {
|
||||
if (data != NULL) {
|
||||
*data = trie->root->data;
|
||||
if (out != NULL) {
|
||||
*out = trie->root->data;
|
||||
}
|
||||
|
||||
trie->root->data = NULL;
|
||||
|
|
@ -250,8 +251,8 @@ lsm_error lsm_trie_remove(void **data, lsm_trie *trie, lsm_str *key) {
|
|||
return lsm_error_not_found;
|
||||
}
|
||||
|
||||
if (data != NULL) {
|
||||
*data = child->data;
|
||||
if (out != NULL) {
|
||||
*out = child->data;
|
||||
}
|
||||
|
||||
child->data = NULL;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue