//----------------------------------------------------------------------
//  SPECIFICATION FILE (uqueue.h)
//  This module exports an ADT for an unbounded queue of integer values.
//  The maximum queue length is MAX_LENG, an unspecified value.
//----------------------------------------------------------------------
#include "bool.h"

// DOMAIN: An IntQueue instance is a collection of integer values

struct NodeType;   // Complete declaration hidden in
                   // implementation file

class IntQueue {
public:
    Boolean IsEmpty() const;
        // POST: FCTVAL == (Length(queue) == 0)

    Boolean IsFull() const;
        // POST: FCTVAL == (Length(queue) == MAX_LENG)

    void Enqueue( /* in */ int newItem );
        // PRE:  Length(queue) < MAX_LENG  &&  Assigned(newItem)
        // POST: queue == AppendBack(queue<entry>,newItem)

    int Front() const;
        // PRE:  Length(queue) >= 1
        // POST: FCTVAL == Front(queue)

    void Dequeue();
        // PRE:  Length(queue) >= 1
        // POST: queue == RemoveFront(queue<entry>)

    IntQueue();
        // Constructor
        // POST: Created(queue)  &&  queue == <>

    IntQueue( const IntQueue& otherQ );
        // Copy-constructor
        // POST: Created(queue)  &&  queue == otherQ

    ~IntQueue();
        // Destructor
        // POST: NOT Created(queue)
private:
    NodeType* front;
    NodeType* rear;
};

