#ifndef QUEUE_H
#define QUEUE_H

#include "list.h"

//
// The Queue data type is just a wrapper for List. It uses wrapper
// functions to provide the functionality of these particular abstract
// data types. The usage of these functions are very similar to the 
// usage of the List functions. Use the descriptions provided in the
// List header file (list.h) as a primary reference, but notes will
// be provided to discern differences between the two.
//


struct Queue
{
	List list;
};

typedef struct Queue Queue;

void Queue_Create(Queue *,size_t);
void Queue_Destroy(Queue*);
void Queue_Enqueue(Queue*,Pointer); //Inserts a copy of the data pointed to by
                                    //data. 
                                    //Queue_Enqueue(&queue,&data);

void Queue_Dequeue(Queue*);         //Removes the next element in the queue.
                                    //Queue_Dequeue(&queue);
size_t Queue_Length(Queue*);
Pointer Queue_Next(Queue*);         //Returns a pointer to a copy of the data
                                    //held in the first element of the queue.
                                    //int *x; ... x = Queue_Next(&queue);

#endif
