/* ArrayQueue.h declares a Queue class using a dynamic array.
 * Begun by: Joel Adams, for CS 112 at Calvin College.
 * Student name:
 * Date:
 * 
 * Class Invariant: 
 *    mySize == 0 ||
 *    mySize > 0 && myArray[myFirst] == getFirst()
 *               && myArray[myLast-1] == getLast().
 * 
 *  (When I am not empty:
 *     myFirst is the index of my oldest value;
 *     myLast is the index of the spot where the next
 *       item to be appended will be placed.)      
 */

#ifndef ARRAY_QUEUE_H_
#define ARRAY_QUEUE_H_

#include "QueueException.h"

typedef int Item;
 
class ArrayQueue {
public:

//	ArrayQueue(const ArrayQueue& original);
//	virtual ~ArrayQueue();
//	ArrayQueue& operator=(const ArrayQueue& original);
//	unsigned getSize() const;
//	unsigned getCapacity() const;
//	bool isEmpty() const;
//	bool isFull() const;

protected:
	virtual void makeCopyOf(const ArrayQueue& original);
private:
	unsigned mySize;       // number of items I contain
	unsigned myCapacity;   // room I have for items
	unsigned myFirst;      // index of oldest item (if any)
	unsigned myLast;       // index of next available spot for append (if any)
	Item*    myArray;      // dynamic array of items
	friend class ArrayQueueTester;
};

#endif /*ARRAY_QUEUE_H_*/

