Subversion Repositories shark

Rev

Blame | Last modification | View Log | RSS feed

/*
 * Copyright 1995, Brown University, Providence, RI
 *
 * Permission to use and modify this software and its documentation for
 * any purpose other than its incorporation into a commercial product is
 * hereby granted without fee.  Permission to copy and distribute this
 * software and its documentation only for non-commercial use is also
 * granted without fee, provided, however, that the above copyright notice
 * appear in all copies, that both that copyright notice and this permission
 * notice appear in supporting documentation, that the name of Brown
 * University not be used in advertising or publicity pertaining to
 * distribution of the software without specific, written prior permission,
 * and that the person doing the distribution notify Brown University of
 * such distributions outside of his or her organization. Brown University
 * makes no representations about the suitability of this software for
 * any purpose.  It is provided "as is" without express or implied warranty.
 * Brown University requests notification of any modifications to this
 * software or its documentation.
 *
 * Send the following redistribution information:
 *
 *      Name:
 *      Organization:
 *      Address (postal and/or electronic):
 *
 * To:
 *      Software Librarian
 *      Computer Science Department, Box 1910
 *      Brown University
 *      Providence, RI 02912
 *
 *              or
 *
 *      brusd@cs.brown.edu
 *
 * We will acknowledge all electronic notifications.
 */

#include "queue_int.H"

QUEUEint::QUEUEint()
    : headOfList(NULL),
      tailOfList(NULL)
{
}


//Deconstructor
QUEUEint::~QUEUEint()
{
        //Dequeue all the nodes
        for (int result=1,tmp;result;tmp=deQueue(result)) {
        }

}

int QUEUEint::deQueue(int &result)
{
        if (!tailOfList) {
                result=0;
                return 0;
        } else result=1;

        int retVal = headOfList->data;

        //save node to delete
        Item *deleteNode=headOfList;

        // only one node on list?
        if (tailOfList==headOfList) {
           tailOfList=headOfList=NULL;
        } else headOfList=headOfList->next;

        delete [] deleteNode;
        return retVal;
}

void
QUEUEint::enQueue(const int& inVal)
{
        //Allocate new node
        Item *newNode=(Item *) new char[sizeof(Item)];

        //Set value
        newNode->data=inVal;

        //Set links in newNode
        newNode->prev=tailOfList;
        newNode->next=NULL;

        //Set links to this node
        if (tailOfList) {
           //Already a tail node whose next pointer we have to fix
           tailOfList->next=newNode;
        } else {
           //first node
           headOfList=newNode;
        }
        tailOfList=newNode;
}