Source of ArrayQueue.cpp


  1: //  Created by Frank M. Carrano and Tim Henry.
  2: //  Copyright (c) 2013 __Pearson Education__. All rights reserved.

  4: /** ADT queue: Circular array-based implementation.
  5:  Listing 14-5.
  6:  @file ArrayQueue.cpp */

  8: #include "ArrayQueue.h"  // Header file

 10: template<class ItemType>
 11: ArrayQueue<ItemType>::ArrayQueue() : front(0), back(MAX_QUEUE - 1), count(0)
 12: {
 13: } // end default constructor

 15: template<class ItemType>
 16: bool ArrayQueue<ItemType>::isEmpty() const
 17: {
 18:    return count == 0;
 19: } // end isEmpty

 21: template<class ItemType>
 22: bool ArrayQueue<ItemType>::enqueue(const ItemType& newEntry)
 23: {
 24:    bool result = false;
 25:    if (count < MAX_QUEUE)
 26:    {
 27:       // Queue has room for another item
 28:       back = (back + 1) % MAX_QUEUE;
 29:       items[back] = newEntry;
 30:       count++;
 31:       result = true;
 32:    } // end if
 33:    
 34:    return result;
 35: } // end enqueue

 37: template<class ItemType>
 38: bool ArrayQueue<ItemType>::dequeue()
 39: {
 40:    bool result = false;
 41:    if (!isEmpty())
 42:    {
 43:       front = (front + 1) % MAX_QUEUE;
 44:       count--;
 45:       result = true;
 46:    } // end if
 47:    
 48:    return result;
 49: } // end dequeue

 51: template<class ItemType>
 52: ItemType ArrayQueue<ItemType>::peekFront() const throw(PrecondViolatedExcep)
 53: {
 54:    // Enforce precondition
 55:    if (isEmpty())
 56:       throw PrecondViolatedExcep("peekFront() called with empty queue");
 57:    
 58:    // Queue is not empty; return front
 59:    return items[front];
 60: } // end peekFront
 61: // End of implementation file.