From 3c3935dc6d5ba6e4ed33bad1e969aa9888bd3a8a Mon Sep 17 00:00:00 2001 From: Nicolas Dato Date: Sun, 5 Nov 2023 15:07:12 -0300 Subject: Adding some initial code. utils.c for some auxiliary functions, and itc.c for intra-tuberia-communication --- src/tuberia.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/tuberia.c (limited to 'src/tuberia.c') diff --git a/src/tuberia.c b/src/tuberia.c new file mode 100644 index 0000000..3dc5c10 --- /dev/null +++ b/src/tuberia.c @@ -0,0 +1,76 @@ +#include "tuberia.h" +#include "itc.h" + +#include + +struct tube { + struct itc *itc; +}; + +struct tube_source *tube_source_alloc(int nqueue, tube_fetch *fetch, void *opaque) +{ + struct tube_source *source = calloc(1, sizeof(struct tube_source)); + + source->nqueue = nqueue; + source->fetch = fetch; + source->opaque = opaque; + + return source; +} + +struct tube_stage *tube_stage_alloc(int nqueue, tube_process *process, void *opaque) +{ + struct tube_stage *stage = calloc(1, sizeof(struct tube_stage)); + + stage->nqueue = nqueue; + stage->process = process; + stage->opaque = opaque; + + return stage; +} + +void tube_stage_free(struct tube_stage **stage) +{ + if (stage != NULL) { + free(stage); + *stage = NULL; + } +} + +void tube_source_and_stages_free(struct tube_source **source) +{ + struct tube_stage *stage; + struct tube_stage *next; + + if (source != NULL && *source != NULL) { + stage = (*source)->next; + while (stage != NULL) { + next = stage->next; + free(stage); + stage = next; + } + free(*source); + *source = NULL; + } +} + +int tube_stage_append(struct tube_source *source, struct tube_stage *stage) +{ + struct tube_stage **next; + + if (source != NULL || stage != NULL) { + return -1; + } + next = &(source->next); + while (*next != NULL) { + next = &((*next)->next); + } + *next = stage; + + return 0; +} + +tube *tube_create(struct tube_source *source, tube_sink *sink, void *opaque) +{ +} + -- cgit v1.2.3