From 2e93bd794a5af41301abfde8181092a93caa516d Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sun, 31 Mar 2024 17:00:01 +0100 Subject: [PATCH] Switch to using Allocator in dstr --- dstr/include/dstr.h | 5 +++-- dstr/src/dstr.c | 42 +++++++++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/dstr/include/dstr.h b/dstr/include/dstr.h index e0368e2..fb46bc2 100644 --- a/dstr/include/dstr.h +++ b/dstr/include/dstr.h @@ -2,6 +2,7 @@ #define DSTR_H #include "aliases.h" +#include "mem_allocator.h" #ifdef __cplusplus extern "C" { @@ -9,8 +10,8 @@ extern "C" { typedef struct dstr String; -String *wapp_dstr_with_capacity(u64 capacity); -String *wapp_dstr_from_string(const char *str); +String *wapp_dstr_with_capacity(u64 capacity, Allocator *allocator); +String *wapp_dstr_from_string(const char *str, Allocator *allocator); void wapp_dstr_update(String **dst, const char *src); void wapp_dstr_free(String **str); void wapp_dstr_concat(String **dst, const char *src); diff --git a/dstr/src/dstr.c b/dstr/src/dstr.c index 27213f2..03705ae 100644 --- a/dstr/src/dstr.c +++ b/dstr/src/dstr.c @@ -1,5 +1,7 @@ #include "dstr.h" #include "aliases.h" +#include "mem_allocator.h" +#include "mem_libc.h" #include #include #include @@ -9,24 +11,34 @@ #define CAPACITY_SCALAR 8 struct dstr { + Allocator allocator; u64 capacity; u64 size; char buf[]; }; -String *wapp_dstr_with_capacity(u64 capacity) { - String *out = (String *)calloc(1, sizeof(String) + capacity + 1); +String *wapp_dstr_with_capacity(u64 capacity, Allocator *allocator) { + Allocator alloc; + if (allocator) { + alloc = *allocator; + } else { + alloc = wapp_mem_libc_allocator(); + } + + String *out = + (String *)wapp_mem_allocator_alloc(&alloc, sizeof(String) + capacity + 1); if (!out) { return NULL; } + out->allocator = alloc; out->capacity = capacity; out->size = 0; return out; } -String *wapp_dstr_from_string(const char *str) { +String *wapp_dstr_from_string(const char *str, Allocator *allocator) { if (!str) { return NULL; } @@ -35,14 +47,13 @@ String *wapp_dstr_from_string(const char *str) { u64 capacity = length * CAPACITY_SCALAR; - String *out = wapp_dstr_with_capacity(capacity); - + String *out = wapp_dstr_with_capacity(capacity, allocator); if (!out) { return NULL; } out->size = length; - strncpy(out->buf, str, length); + strncpy(out->buf, str, length + 1); return out; } @@ -56,24 +67,24 @@ void wapp_dstr_update(String **dst, const char *src) { String *str = *dst; - if (length <= str->capacity) { + if (length < str->capacity) { memset(str->buf, 0, str->capacity); str->size = length; - strncpy(str->buf, src, length); + strncpy(str->buf, src, length + 1); } else { u64 capacity = length * CAPACITY_SCALAR; - String *tmp = (String *)realloc(*dst, sizeof(String) + capacity + 1); - + String *tmp = (String *)wapp_mem_allocator_realloc( + &(str->allocator), *dst, sizeof(String) + capacity + 1); if (!tmp) { return; } tmp->capacity = capacity; tmp->size = length; - strncpy(tmp->buf, src, length); + strncpy(tmp->buf, src, length + 1); *dst = tmp; } @@ -84,8 +95,8 @@ void wapp_dstr_free(String **str) { return; } - free(*str); - *str = NULL; + String *str_ptr = *str; + wapp_mem_allocator_free(&(str_ptr->allocator), (void **)str); } void wapp_dstr_concat(String **dst, const char *src) { @@ -131,10 +142,11 @@ void wapp_dstr_resize(String **str) { return; } + String *str_ptr = *str; u64 capacity = (*str)->size; - String *tmp = (String *)realloc(*str, sizeof(String) + capacity + 1); - + String *tmp = (String *)wapp_mem_allocator_realloc( + &(str_ptr->allocator), *str, sizeof(String) + capacity + 1); if (!tmp) { return; }