#include <iostream>
#include "objQueue.h"

using namespace std;

objQueue::objQueue(int s)
{
	queueArray = new PCB[s];
	queueSize = s;
	front = 0;
	rear = 0;
	numItems = 0;
}

objQueue::~objQueue(void)
{
	delete [] queueArray;
}

void objQueue::enqueue(PCB obj)
{
	if (isFull())
		cout << "The queue is full.\n";
	else{
		// Calc the new rear pos
  		rear = (rear + 1) % queueSize;
		// put in a new item
		queueArray[rear] = obj;
		// update item count
		numItems++;
    }
}

void objQueue::dequeue(PCB &obj)
{
	if (isEmpty())
		cout << "The queue is empty.\n";
	else
	{
		// Send to front
		front = (front + 1) % queueSize;
		// Retrieve front item
		obj = queueArray[front];
		// Update item count
		numItems--;
	}
}

bool objQueue::isEmpty(void)
{
	bool status;
	
	if (numItems)
		status = false;
	else
		status = true;
		
	return status;
}

bool objQueue::isFull(void)
{
	bool status;
	
	if (numItems < queueSize)
		status = false;
	else
		status = true;

	return status;
}

int objQueue::count(void)
{
	return numItems;
}

void objQueue::clear(void)
{
	front = queueSize - 1;
	rear = queueSize -1;
	numItems = 0;
}
      
        



