#include <stdint.h>
#include <string.h>
#include <iostream>
using namespace std;

#include "FIFOQueue.hpp"

int32_t FIFOQueue::enqueue(QRecord* qRecord)
{
	pushQueue(qRecord);
	return (count);
}
int32_t FIFOQueue::pushQueue(QRecord* qRecord)
{
	if (count >= qDepth)
	{
		logError();
		return (-1);
	}

	queue[head].dateStamp = qRecord->dateStamp;
	queue[head].timeStamp = qRecord->timeStamp;
	queue[head].msgID = qRecord->msgID;
	queue[head].msg = qRecord->msg;
	
	head = (head + 1) % qDepth;
	count++;
	return (count);
}

int32_t FIFOQueue::dequeue(QRecord* qRecord)
{
	popQueue(qRecord);
	return (count);
}
int32_t FIFOQueue::popQueue(QRecord* qRecord)
{
	QRecord returnQRecord;
	
	if (count == 0) 
	{
		logError();
		return(-2);
	}

	qRecord->dateStamp = queue[tail].dateStamp;
	qRecord->timeStamp = queue[tail].timeStamp;
	qRecord->msgID = queue[tail].msgID;
	qRecord->msg = queue[tail].msg;
	
	tail = (tail + 1) % qDepth;
	count--;
	return(count);
}

void FIFOQueue::logError()
{
	cout << "FIFO Queue log error()" << endl;
}