public class MessageQueue
1: /**
2: A first-in, first-out bounded collection of messages.
3: */
4: public class MessageQueue
5: {
6: /**
7: Constructs an empty message queue.
8: @param capacity the maximum capacity of the queue
9: @precondition capacity > 0
10: */
11: public MessageQueue(int capacity)
12: {
13: elements = new Message[capacity];
14: count = 0;
15: head = 0;
16: tail = 0;
17: }
19: /**
20: Remove message at head.
21: @return the message that has been removed from the queue
22: @precondition size() > 0
23: */
24: public Message remove()
25: {
26: Message r = elements[head];
27: head = (head + 1) % elements.length;
28: count--;
29: return r;
30: }
32: /**
33: Append a message at tail.
34: @param aMessage the message to be appended
35: @precondition !isFull();
36: */
37: public void add(Message aMessage)
38: {
39: elements[tail] = aMessage;
40: tail = (tail + 1) % elements.length;
41: count++;
42: }
44: /**
45: Get the total number of messages in the queue.
46: @return the total number of messages in the queue
47: */
48: public int size()
49: {
50: return count;
51: }
53: /**
54: Checks whether this queue is full
55: @return true if the queue is full
56: */
57: public boolean isFull()
58: {
59: return count == elements.length;
60: }
62: /**
63: Get message at head.
64: @return the message that is at the head of the queue
65: @precondition size() > 0
66: */
67: public Message peek()
68: {
69: return elements[head];
70: }
72: private Message[] elements;
73: private int head;
74: private int tail;
75: private int count;
76: }