Return StringUpdate from the dstr update functions

This commit is contained in:
Abdelrahman Said 2024-04-29 22:55:40 +01:00
parent e75846a507
commit bb2db0d30d
2 changed files with 18 additions and 11 deletions

View File

@ -54,9 +54,9 @@ String *wapp_dstr_from_string(const char *str, Arena *arena) {
return out; return out;
} }
String *wapp_dstr_update(String **dst, const char *src, Arena *arena) { StringUpdate wapp_dstr_update(String **dst, const char *src, Arena *arena) {
if (!dst || !(*dst)) { if (!dst || !(*dst)) {
return *dst; return (StringUpdate){.updated = false, .str = *dst};
} }
u64 length = strlen(src); u64 length = strlen(src);
@ -65,15 +65,15 @@ String *wapp_dstr_update(String **dst, const char *src, Arena *arena) {
if (length >= str->capacity) { if (length >= str->capacity) {
if (!arena) { if (!arena) {
return *dst; return (StringUpdate){.updated = false, .str = *dst};
} }
String *new_str = wapp_dstr_from_string(src, arena); String *new_str = wapp_dstr_from_string(src, arena);
if (!new_str) { if (!new_str) {
return *dst; return (StringUpdate){.updated = false, .str = *dst};
} }
return new_str; return (StringUpdate){.updated = true, .str = new_str};
} }
memset(str->buf, 0, str->capacity); memset(str->buf, 0, str->capacity);
@ -82,17 +82,17 @@ String *wapp_dstr_update(String **dst, const char *src, Arena *arena) {
strncpy(str->buf, src, length + 1); strncpy(str->buf, src, length + 1);
return *dst; return (StringUpdate){.updated = true, .str = *dst};
} }
String *wapp_dstr_concat(String **dst, const char *src, Arena *arena) { StringUpdate wapp_dstr_concat(String **dst, const char *src, Arena *arena) {
if (!dst || !(*dst)) { if (!dst || !(*dst)) {
return *dst; return (StringUpdate){.updated = false, .str = *dst};
} }
u64 src_length = strlen(src); u64 src_length = strlen(src);
if (src_length == 0) { if (src_length == 0) {
return *dst; return (StringUpdate){.updated = false, .str = *dst};
} }
u64 new_length = (*dst)->size + src_length; u64 new_length = (*dst)->size + src_length;

View File

@ -3,6 +3,7 @@
#include "aliases.h" #include "aliases.h"
#include "mem_arena.h" #include "mem_arena.h"
#include <stdbool.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -10,10 +11,16 @@ extern "C" {
typedef struct dstr String; typedef struct dstr String;
typedef struct string_update StringUpdate;
struct string_update {
bool updated;
String *str;
};
String *wapp_dstr_with_capacity(u64 capacity, Arena *arena); String *wapp_dstr_with_capacity(u64 capacity, Arena *arena);
String *wapp_dstr_from_string(const char *str, Arena *arena); String *wapp_dstr_from_string(const char *str, Arena *arena);
String *wapp_dstr_update(String **dst, const char *src, Arena *arena); StringUpdate wapp_dstr_update(String **dst, const char *src, Arena *arena);
String *wapp_dstr_concat(String **dst, const char *src, Arena *arena); StringUpdate wapp_dstr_concat(String **dst, const char *src, Arena *arena);
void wapp_dstr_clear(String *str); void wapp_dstr_clear(String *str);
void wapp_dstr_print(const String *str); void wapp_dstr_print(const String *str);
i64 wapp_dstr_find(const String *str, const char *substr); i64 wapp_dstr_find(const String *str, const char *substr);