#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__