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