//----------------------------------------------------------------------
//  IMPLEMENTATION FILE (eventq.cpp)
//----------------------------------------------------------------------
#include "eventq.h"

EventQ::EventQ()
    //..................................................................
    // Constructor
    // POST: front == NULL  &&  rear == NULL
    //..................................................................
{
    //Init!

    Front = NULL;
    Rear = NULL;

    Count = 0;
}

EventQ::~EventQ()
{	
     NodeType *NPtr;

     //Mr. Destruct0 - Loop through each node
     while(Count != 0)
     {
         NPtr = Front;
         Front = Front->link;
         Count--;
         delete NPtr->event;
         delete NPtr;
     }
        
}

Boolean EventQ::IsEmpty() const
    //..................................................................
    // POST: FCTVAL == (rear == front)
    //..................................................................
{
    return (Count == 0);
}

void EventQ::Enqueue(Event *newevent)
{
        //Make the Node
        NodePtr NewPtr = new NodeType;
        NewPtr->event = newevent;

        //Link it in
        NewPtr->link = NULL;
        
        if(Count == 0) //No nodes yet
                Rear = Front = NewPtr;
        else
        {
                Rear->link = NewPtr; 
                Rear = NewPtr;

        }

        //Increase count
        Count++;     

} //End Enqueue

Event *EventQ::Dequeue()
{
        Event *EPtr;
        NodePtr NPtr;

        //Save some pointers
        EPtr = Front->event;
        NPtr = Front;

        if(Count == 1)  //Last node
                Front = Rear = NULL;
        else
                Front = Front->link;

        Count --;
        delete NPtr;

        return(EPtr);
}


void EventQ::Display()
{
        NodePtr NPtr;

	NPtr = Front;
        while(NPtr != NULL)
        {
                NPtr->event->Display();
                NPtr = NPtr->link;
        }
}

