1 #ifndef _ring_h_ 2 #define _ring_h_ 3 4 typedef enum { 5 BLOCK, 6 LIGHT, 7 KEY, 8 COMMIT, 9 EXIT 10 } RingEntryType; 11 12 typedef struct { 13 RingEntryType type; 14 int p; 15 int q; 16 int x; 17 int y; 18 int z; 19 int w; 20 int key; 21 } RingEntry; 22 23 typedef struct { 24 unsigned int capacity; 25 unsigned int start; 26 unsigned int end; 27 RingEntry *data; 28 } Ring; 29 30 void ring_alloc(Ring *ring, int capacity); 31 void ring_free(Ring *ring); 32 int ring_empty(Ring *ring); 33 int ring_full(Ring *ring); 34 int ring_size(Ring *ring); 35 void ring_grow(Ring *ring); 36 void ring_put(Ring *ring, RingEntry *entry); 37 void ring_put_block(Ring *ring, int p, int q, int x, int y, int z, int w); 38 void ring_put_light(Ring *ring, int p, int q, int x, int y, int z, int w); 39 void ring_put_key(Ring *ring, int p, int q, int key); 40 void ring_put_commit(Ring *ring); 41 void ring_put_exit(Ring *ring); 42 int ring_get(Ring *ring, RingEntry *entry); 43 44 #endif 45