Source of MessageQueue.java


  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: }