aboutsummaryrefslogtreecommitdiff
path: root/src/tuberia.c
blob: 3dc5c10a4936303c242ae28cac828b7fed6c32e6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "tuberia.h"
#include "itc.h"

#include <stdlib.h>

struct tube {
        struct itc *itc;
};

struct tube_source *tube_source_alloc(int nqueue, tube_fetch *fetch, void *opaque)
{
        struct tube_source *source = calloc(1, sizeof(struct tube_source));

        source->nqueue = nqueue;
        source->fetch = fetch;
        source->opaque = opaque;

        return source;
}

struct tube_stage *tube_stage_alloc(int nqueue, tube_process *process, void *opaque)
{
        struct tube_stage *stage = calloc(1, sizeof(struct tube_stage));

        stage->nqueue = nqueue;
        stage->process = process;
        stage->opaque = opaque;

        return stage;
}

void tube_stage_free(struct tube_stage **stage)
{
        if (stage != NULL) {
                free(stage);
                *stage = NULL;
        }
}

void tube_source_and_stages_free(struct tube_source **source)
{
        struct tube_stage *stage;
        struct tube_stage *next;

        if (source != NULL && *source != NULL) {
                stage = (*source)->next;
                while (stage != NULL) {
                        next = stage->next;
                        free(stage);
                        stage = next;
                }
                free(*source);
                *source = NULL;
        }
}

int tube_stage_append(struct tube_source *source, struct tube_stage *stage)
{
        struct tube_stage **next;

        if (source != NULL || stage != NULL) {
                return -1;
        }
        next = &(source->next);
        while (*next != NULL) {
                next = &((*next)->next);
        }
        *next = stage;

        return 0;
}

tube *tube_create(struct tube_source *source, tube_sink *sink, void *opaque)
{
}