diff options
Diffstat (limited to 'src/tuberia.c')
-rw-r--r-- | src/tuberia.c | 76 |
1 files changed, 76 insertions, 0 deletions
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 <stdlib.h> + +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) +{ +} + |