feat(lsm): write str tests; start trie tests
This commit is contained in:
parent
87000e8f73
commit
ef8129b8eb
7 changed files with 441 additions and 52 deletions
|
|
@ -7,6 +7,20 @@
|
|||
|
||||
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
|
||||
|
||||
lsm_error lsm_str_init(lsm_str **ptr, char *s) {
|
||||
lsm_str *str = calloc(1, sizeof(lsm_str));
|
||||
|
||||
if (str == NULL) {
|
||||
return lsm_error_failed_alloc;
|
||||
}
|
||||
|
||||
lsm_str_overwrite(str, s);
|
||||
|
||||
*ptr = str;
|
||||
|
||||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
lsm_error lsm_str_init_zero(lsm_str **ptr) {
|
||||
lsm_str *str = calloc(1, sizeof(lsm_str));
|
||||
|
||||
|
|
@ -19,7 +33,21 @@ lsm_error lsm_str_init_zero(lsm_str **ptr) {
|
|||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
void lsm_str_init_prealloc(lsm_str *str, char *s) {
|
||||
lsm_error lsm_str_init_copy(lsm_str **ptr, char *s) {
|
||||
lsm_str *str = calloc(1, sizeof(lsm_str));
|
||||
|
||||
if (str == NULL) {
|
||||
return lsm_error_failed_alloc;
|
||||
}
|
||||
|
||||
lsm_str_overwrite_copy(str, s);
|
||||
|
||||
*ptr = str;
|
||||
|
||||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
void lsm_str_overwrite(lsm_str *str, char *s) {
|
||||
str->len = strlen(s);
|
||||
|
||||
if (str->len <= 8) {
|
||||
|
|
@ -30,27 +58,7 @@ void lsm_str_init_prealloc(lsm_str *str, char *s) {
|
|||
}
|
||||
}
|
||||
|
||||
lsm_error lsm_str_init(lsm_str **ptr, char *s) {
|
||||
lsm_str *str = calloc(1, sizeof(lsm_str));
|
||||
|
||||
if (str == NULL) {
|
||||
return lsm_error_failed_alloc;
|
||||
}
|
||||
|
||||
lsm_str_init_prealloc(str, s);
|
||||
|
||||
*ptr = str;
|
||||
|
||||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
lsm_error lsm_str_init_copy(lsm_str **ptr, char *s) {
|
||||
lsm_str *str = calloc(1, sizeof(lsm_str));
|
||||
|
||||
if (str == NULL) {
|
||||
return lsm_error_failed_alloc;
|
||||
}
|
||||
|
||||
lsm_error lsm_str_overwrite_copy(lsm_str *str, char *s) {
|
||||
str->len = strlen(s);
|
||||
|
||||
if (str->len <= 8) {
|
||||
|
|
@ -66,8 +74,6 @@ lsm_error lsm_str_init_copy(lsm_str **ptr, char *s) {
|
|||
str->data.ptr = buf;
|
||||
}
|
||||
|
||||
*ptr = str;
|
||||
|
||||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
|
|
@ -80,10 +86,7 @@ void lsm_str_zero(lsm_str *str) {
|
|||
}
|
||||
|
||||
void lsm_str_free(lsm_str *str) {
|
||||
if (str->len > 8) {
|
||||
free(str->data.ptr);
|
||||
}
|
||||
|
||||
lsm_str_zero(str);
|
||||
free(str);
|
||||
}
|
||||
|
||||
|
|
@ -112,7 +115,7 @@ lsm_error lsm_str_substr(lsm_str *out, lsm_str *str, uint64_t start,
|
|||
const char *str_ptr = lsm_str_ptr(str);
|
||||
|
||||
if (len <= 8) {
|
||||
lsm_str_zero(out);
|
||||
/* lsm_str_zero(out); */
|
||||
memcpy(out->data.val, &str_ptr[start], len);
|
||||
} else {
|
||||
char *buf = malloc(len * sizeof(char));
|
||||
|
|
@ -123,7 +126,7 @@ lsm_error lsm_str_substr(lsm_str *out, lsm_str *str, uint64_t start,
|
|||
|
||||
memcpy(buf, &str_ptr[start], len);
|
||||
|
||||
lsm_str_zero(out);
|
||||
/* lsm_str_zero(out); */
|
||||
out->data.ptr = buf;
|
||||
}
|
||||
|
||||
|
|
@ -185,3 +188,11 @@ lsm_error lsm_str_split(lsm_str *s, lsm_str *s2, uint64_t index) {
|
|||
|
||||
return lsm_str_truncate(s, index);
|
||||
}
|
||||
|
||||
bool lsm_str_eq(lsm_str *s1, lsm_str *s2) {
|
||||
if (s1->len != s2->len) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return memcmp(lsm_str_ptr(s1), lsm_str_ptr(s2), s1->len) == 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ lsm_error lsm_trie_init(lsm_trie **ptr) {
|
|||
return lsm_error_ok;
|
||||
}
|
||||
|
||||
uint64_t lsm_trie_size(lsm_trie *trie) { return trie->size; }
|
||||
|
||||
lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
|
||||
// NULL is not allowed as a data value, as it's used to indicate a lack of
|
||||
// data
|
||||
|
|
@ -48,6 +50,7 @@ lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
|
|||
if (key_len == 0) {
|
||||
if (trie->root->data == NULL) {
|
||||
trie->root->data = data;
|
||||
trie->size++;
|
||||
|
||||
return lsm_error_ok;
|
||||
} else {
|
||||
|
|
@ -75,6 +78,8 @@ lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
|
|||
}
|
||||
|
||||
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);
|
||||
|
|
@ -125,6 +130,7 @@ lsm_error lsm_trie_insert(lsm_trie *trie, lsm_str *key, void *data) {
|
|||
}
|
||||
|
||||
node->data = data;
|
||||
trie->size++;
|
||||
|
||||
return lsm_error_ok;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue