rdex-client: untested pthread fifo for consumer callbacks
[rdex:client.git] / src / pfifo.h
1 /* =====================================================================
2 rdex -- reaction-diffusion explorer
3 Copyright (C) 2009  Claude Heiland-Allen <claudiusmaximus@goto10.org>
4 ------------------------------------------------------------------------
5 pthread-based fifo
6 ===================================================================== */
7
8 #ifndef PFIFO_H
9 #define PFIFO_H 1
10
11 #include <stdlib.h>
12 #include <pthread.h>
13 #include "list.h"
14
15 typedef void (pfifo_consumer)(void *, size_t, void *);
16
17 struct pfifo_node {
18   struct node node;
19   size_t length;
20   void *data;
21 };
22
23 struct pfifo {
24   pfifo_consumer *consumer;
25   void *consumerdata;
26   struct list list;
27   pthread_t thread;
28   pthread_mutex_t *mutex;
29   pthread_cond_t *nonempty;
30 };
31
32 struct pfifo *pfifo_create(pfifo_consumer *consumer, void *consumerdata);
33 void pfifo_destroy(struct pfifo *fifo);
34 void pfifo_enqueue(struct pfifo *fifo, size_t length, const void *data);
35
36 #endif