feat(lsm): some more string functions; start of data streaming api

This commit is contained in:
Jef Roosens 2023-10-25 10:57:45 +02:00
parent fca8495de4
commit b552e0a81b
Signed by: Jef Roosens
GPG key ID: B75D4F293C7052DB
9 changed files with 199 additions and 17 deletions

View file

@ -196,3 +196,40 @@ bool lsm_str_eq(lsm_str *s1, lsm_str *s2) {
return memcmp(lsm_str_ptr(s1), lsm_str_ptr(s2), s1->len) == 0;
}
lsm_error lsm_str_append(lsm_str *s, lsm_str *s2) {
if (s2->len == 0) {
return lsm_error_ok;
}
uint64_t new_len = s->len + s2->len;
if (new_len <= 8) {
memcpy(&s->data.val[s->len], s2->data.val, s2->len);
} else {
char *buf;
if (s->len <= 8) {
buf = malloc(new_len * sizeof(char));
if (buf == NULL) {
return lsm_error_failed_alloc;
}
memcpy(buf, s->data.val, s->len);
} else {
buf = realloc(s->data.ptr, new_len * sizeof(char));
if (buf == NULL) {
return lsm_error_failed_alloc;
}
}
memcpy(&buf[s->len], lsm_str_ptr(s2), s2->len);
s->data.ptr = buf;
}
s->len += s2->len;
return lsm_error_ok;
}