aboutsummaryrefslogtreecommitdiff
path: root/src/tuberia.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/tuberia.h')
-rw-r--r--src/tuberia.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/tuberia.h b/src/tuberia.h
new file mode 100644
index 0000000..048b078
--- /dev/null
+++ b/src/tuberia.h
@@ -0,0 +1,43 @@
+#ifndef __LIBTUBERIA_H__
+#define __LIBTUBERIA_H__
+
+typedef struct tube tube;
+
+typedef void *(*tube_fetch)(void *opaque);
+typedef void *(*tube_process)(void *element, void *opaque);
+typedef void (*tube_sink)(void *element, void *opaque);
+typedef void (*tube_free_element)(void *element);
+
+struct tube_stage {
+ struct tube_stage *next;
+ int nqueue;
+ tube_process *process;
+ void *opaque;
+};
+
+struct tube_source {
+ struct tube_stage *next;
+ int nqueue;
+ tube_fetch *fetch;
+ void *opaque;
+};
+
+struct tube_source *tube_source_alloc(int nqueue, tube_fetch *fetch, void *opaque);
+struct tube_stage *tube_stage_alloc(int nqueue, tube_process *process, void *opaque);
+void tube_stage_free(struct tube_stage **stage);
+void tube_source_and_stages_free(struct tube_source **source);
+
+int tube_stage_append(struct tube_source *source, struct tube_stage *stage);
+
+tube *tube_create(struct tube_source *source, tube_sink *sink, void *opaque);
+int tube_start(tube *tube);
+int tube_stop(tube *tube);
+void tube_free(tube **tube, tube_free_element free_element);
+
+int tube_inject(tube *tube, int timeout_ms, void *element);
+void *tube_retrive(tube *tube, int timeout_ms);
+int tube_flush(tube *tube);
+int tube_drop(tube *tube, tube_free_element free_element);
+
+#endif //__LIBTUBERIA_H__
+