From 30487c277ac5d4be5786733ca7b98adb4c810ae9 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 27 Oct 2021 14:15:31 -0400 Subject: Add custom allocator support --- src/inserter.c | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) (limited to 'src/inserter.c') diff --git a/src/inserter.c b/src/inserter.c index 9f388921..f5419b81 100644 --- a/src/inserter.c +++ b/src/inserter.c @@ -14,6 +14,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include "memory.h" #include "model.h" #include "statement.h" @@ -24,8 +25,8 @@ #include typedef struct { - SerdModel* model; - const SerdNode* default_graph; + SerdModel* model; + SerdNode* default_graph; } SerdInserterData; static bool @@ -107,19 +108,38 @@ serd_inserter_on_event(SerdInserterData* const data, return SERD_SUCCESS; } +static SerdInserterData* +serd_inserter_data_new(SerdModel* const model, + const SerdNode* const default_graph) +{ + SerdInserterData* const data = + (SerdInserterData*)serd_wcalloc(model->world, 1, sizeof(SerdInserterData)); + + if (data) { + data->model = model; + data->default_graph = serd_node_copy(model->allocator, default_graph); + } + + return data; +} + +static void +serd_inserter_data_free(SerdInserterData* const data) +{ + serd_node_free(data->model->allocator, data->default_graph); + serd_wfree(data->model->world, data); +} + SerdSink* serd_inserter_new(SerdModel* const model, const SerdNode* const default_graph) { assert(model); - SerdInserterData* const data = - (SerdInserterData*)calloc(1, sizeof(SerdInserterData)); - - data->model = model; - data->default_graph = serd_node_copy(default_graph); - - SerdSink* const sink = serd_sink_new( - model->world, data, (SerdEventFunc)serd_inserter_on_event, free); + SerdEventFunc func = (SerdEventFunc)serd_inserter_on_event; + SerdInserterData* const data = serd_inserter_data_new(model, default_graph); - return sink; + return data + ? serd_sink_new( + model->world, data, func, (SerdFreeFunc)serd_inserter_data_free) + : NULL; } -- cgit v1.2.1