1 
2 #ifndef __SCHRO_QUEUE_H__
3 #define __SCHRO_QUEUE_H__
4 
5 #include <schroedinger/schroutils.h>
6 
7 SCHRO_BEGIN_DECLS
8 
9 typedef struct _SchroQueue SchroQueue;
10 typedef struct _SchroQueueElement SchroQueueElement;
11 
12 typedef void (*SchroQueueFreeFunc)(void *data, SchroPictureNumber number);
13 
14 struct _SchroQueueElement {
15   void *data;
16   SchroPictureNumber picture_number;
17 };
18 
19 struct _SchroQueue {
20   int size;
21   int n;
22 
23   SchroQueueElement *elements;
24   SchroQueueFreeFunc free;
25 };
26 
27 #ifdef SCHRO_ENABLE_UNSTABLE_API
28 
29 SchroQueue *schro_queue_new (int size, SchroQueueFreeFunc func);
30 void schro_queue_free (SchroQueue *queue);
31 
32 void schro_queue_add (SchroQueue *queue, void *element,
33     SchroPictureNumber picture_number);
34 void *schro_queue_find (SchroQueue *queue, SchroPictureNumber picture_number);
35 void schro_queue_delete (SchroQueue *queue, SchroPictureNumber picture_number);
36 void *schro_queue_remove (SchroQueue *queue, SchroPictureNumber picture_number);
37 void schro_queue_clear (SchroQueue *queue);
38 void schro_queue_pop (SchroQueue *queue);
39 void * schro_queue_pull (SchroQueue *queue);
40 void *schro_queue_peek (SchroQueue *queue);
41 int schro_queue_is_full (SchroQueue *queue);
42 int schro_queue_is_empty (SchroQueue *queue);
43 int schro_queue_slots_available (SchroQueue *queue);
44 
45 #endif
46 
47 SCHRO_END_DECLS
48 
49 #endif
50 
51