// fifo.cpp  -- A queue of integers (dynamic storage)

#include "fifo.h"

#define NULL 0

// Create and initialize a fifo
// It returns a fifo whose head and tal are null
void createFifo(fifo& queue)
{
	queue.head = NULL;
	queue.tail = NULL;
}

// enqueue a new value into an existing fifo
void enqueue(fifo& queue, int who)
{
	node *a = new node;

	a->next = NULL;
	a->value = who;
	if (queue.head == NULL)
		queue.head = a;
	else
		queue.tail->next = a;
	queue.tail = a;
}

// dequeue a value from a fifo
int dequeue(fifo& queue)
{
	node *headNode;
	int who;

	if (queue.head != NULL) {
		headNode = queue.head;
		queue.head = queue.head->next;
		who = headNode->value;
		if (queue.head == NULL)
			queue.tail = NULL;
		delete headNode;
		return who;
	}
	return 0; // You should never execute this
	          // statement (i.e. do not dequeue
			  // from an empty queue)
}

// check if a fifo is empty
int isempty(fifo& queue)
{
	return (queue.head == NULL);
}