// // Queue.cc // // Queue: This class implements a linked list of objects. It itself is also an // object // // Part of the ht://Dig package // Copyright (c) 1999-2004 The ht://Dig Group // For copyright details, see the file COPYING in your distribution // or the GNU Library General Public License (LGPL) version 2 or later // // // $Id: Queue.cc,v 1.6 2004/05/28 13:15:21 lha Exp $ // #ifdef HAVE_CONFIG_H #include "htconfig.h" #endif /* HAVE_CONFIG_H */ #include "Queue.h" struct Queuenode { Queuenode *next; Object *obj; }; //*************************************************************************** // Queue::Queue() // Queue::Queue() { head = tail = 0; size = 0; } //*************************************************************************** // Queue::~Queue() // Queue::~Queue() { destroy(); } //*************************************************************************** // void Queue::destroy() // void Queue::destroy() { while (head) { Object *obj = pop(); delete obj; } size = 0; head = tail = 0; } //*************************************************************************** // void Queue::push(Object *obj) // Push an object onto the Queue. // void Queue::push(Object *obj) { Queuenode *node = new Queuenode; node->obj = obj; node->next = 0; if (tail) ((Queuenode *) tail)->next = node; tail = node; if (!head) head = tail; size++; } //*************************************************************************** // Object *Queue::pop() // Return the object at the head of the Queue and remove it // Object *Queue::pop() { if (size == 0) return 0; Queuenode *node = (Queuenode *) head; Object *obj = node->obj; head = (void *) node->next; delete node; size--; if (!head) tail = 0; return obj; } //*************************************************************************** // Object *Queue::peek() // Return the object at the top of the Queue. // Object *Queue::peek() { if (size == 0) return 0; return ((Queuenode *)head)->obj; }