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.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/tuberia.h (limited to 'src/tuberia.h') 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__ + -- cgit v1.2.3