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