aboutsummaryrefslogtreecommitdiff
path: root/src/tuberia.h
diff options
context:
space:
mode:
authorNicolas Dato <nicolas.dato@gmail.com>2023-11-05 15:07:12 -0300
committerNicolas Dato <nicolas.dato@gmail.com>2023-11-05 15:07:12 -0300
commit3c3935dc6d5ba6e4ed33bad1e969aa9888bd3a8a (patch)
treeef6e9118e42c23ed7fb0b363ab47c6f1cc81b11b /src/tuberia.h
parent0ad04cccbecd82d2683b54338b8dd088492b7215 (diff)
downloadlibtuberia-3c3935dc6d5ba6e4ed33bad1e969aa9888bd3a8a.tar.gz
Adding some initial code. utils.c for some auxiliary functions, and itc.c for intra-tuberia-communication
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__
+