/* eventPQ.h
 * A priority queue for events.
 */

#ifndef EVENTPQ_H
#define EVENTPQ_H

#include "events.H"

class PQnode {
    friend class EventPQ;

private:
    Event *data;
    PQnode *next;
};

class EventPQ {

private:
    PQnode *head;

public:
    EventPQ();

    Event *dequeue(void); // remove the event from the front of the queue
    void enqueue(Event *); // add an event to the priority queue
    void del(Event *); // delete an event that has been put on the queue
    int empty(void) {return head == NULL;}
    void print();
    
    ~EventPQ(){ while (!empty()) {Event *e = this->dequeue(); delete e;}}
};

#endif
