diff options
Diffstat (limited to 'src/tuberia.h')
-rw-r--r-- | src/tuberia.h | 43 |
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__ + |