5 struct graphnode
*graphnode_create(void)
7 struct graphnode
*node
;
8 node
= malloc(sizeof *node
);
12 memset(node
, 0, sizeof *node
);
16 void graphnode_free(struct graphnode
*node
)
21 int graph_create(struct graph
*graph
)
23 graph
->node_first
= graph
->node_last
= NULL
;
27 void graph_destroy(struct graph
*graph
)
32 void graph_append_node(struct graph
*graph
, struct graphnode
*node
)
34 node
->prev
= graph
->node_last
;
36 *(graph
->node_last
? &graph
->node_last
->next
: &graph
->node_first
) = node
;
37 graph
->node_last
= node
;
40 void graph_insert_node(struct graph
*graph
, struct graphnode
*node
, struct graphnode
*before_node
)
43 graph_append_node(graph
, node
);
45 node
->next
= before_node
;
46 node
->prev
= before_node
->prev
;
47 *(before_node
->prev
? &before_node
->prev
->next
: &graph
->node_first
) = node
;
48 before_node
->prev
= node
;
52 void graph_remove(struct graph
*graph
, struct graphnode
*node
)
54 *(node
->prev
? &node
->prev
->next
: &graph
->node_first
) = node
->next
;
55 *(node
->next
? &node
->next
->prev
: &graph
->node_last
) = node
->prev
;
58 int graph_run(struct graph
*graph
, long n_samples
)
60 struct graphnode
*node
;
62 node
= graph
->node_first
;
64 if (node
->ef
->vtab
->process(node
->ef
, &buf_ptr
, n_samples
)){