aboutsummaryrefslogtreecommitdiff
path: root/src/tuberia.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tuberia.c')
-rw-r--r--src/tuberia.c76
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)
+{
+}
+