From 5c271cdae60c9711fb100a544d2b014a777c3408 Mon Sep 17 00:00:00 2001 From: Nicolas Dato Date: Sat, 19 Jul 2025 22:53:49 -0300 Subject: adding a simple example --- README.md | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 82f3ccb..10ab5ce 100644 --- a/README.md +++ b/README.md @@ -15,19 +15,29 @@ pipeline ## Building, Compiling, Installing If you don't have a ./configure file, run: + - `autoreconf -fi` When you have the ./configure file, run: + - `./configure` - `make` - `make install` You can see some configuration options with: + - `./configure --help` +## Using this library + +Include tuberia.h, and link libtuberia.a and pthread: `-ltuberia -lpthread` + +You can also use: `pkg-config --cflags --libs --static tuberia` + ## Quick Guide -See the `example/decode_resize_encode.c` and the function `do_tuberia()` +See the files `example/simple.c` and `example/decode_resize_encode.c` +(function `do_tuberia()` in particular) Create a source with `tube_source_alloc()`. If you set fetch to something, there will be a thread running fetch to inject @@ -52,7 +62,59 @@ Free the pipeline with `tube_free()`. ### Quick example -```C +See `examples/simple.c` + +Compile with: `gcc -o simple simple.c -ltuberia -lpthread` + +Or with: ``gcc -o simple simple.c `pkg-config --cflags --libs --static tuberia``` + +```C +#include +#include +#include + +void *stage_one(void *element, void *opaque) +{ + int *i = element; + *i += 5; + return i; +} + +void *stage_two(void *element, void *opaque) +{ + int *i = element; + *i *= 10; + return i; +} + +void sink(void *element, void *opaque) +{ + int *i = element; + printf("sink: %d\n", *i); + free(i); +} + +int main(void) +{ + tube *ctx; + tube_source *source; + int *element, n; + + source = tube_source_alloc(2, NULL, NULL, free); + tube_stage_append(source, tube_stage_alloc(2, stage_one, NULL, free)); + tube_stage_append(source, tube_stage_alloc(2, stage_two, NULL, free)); + ctx = tube_alloc(source, sink, NULL); + tube_source_and_stages_free(&source); + tube_start(ctx); + while (scanf("%d", &n) == 1) { + element = malloc(sizeof(*element)); + *element = n; + tube_inject(ctx, 1000, element); + } + tube_free(&ctx); + + return 0; +} ``` -- cgit v1.2.3