Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/DataType/Queue/LinkedQueue.hpp

Go to the documentation of this file.
00001 #ifndef __J2K__Linked_Queue_HPP__
00002 #define __J2K__Linked_Queue_HPP__
00003 
00004 #include <j2k/Fred/Standard.hpp>
00005 #include <j2k/DataType/Link/SLink.cpp>
00006     
00007 class LinkedQueue {                      // Linked List Queue class
00008 
00009 public:
00010   inline LinkedQueue()                   // Default Constructor
00011     : front( NULL ), rear( NULL ) { }
00012 
00013   inline virtual ~LinkedQueue()          // Destructor: return link Elems
00014   {
00015     clear();
00016   }
00017 
00018   void  clear();                         // Remove all Elem's from queue
00019   void  enqueue( Elem* item );           // Enqueue Elem at rear
00020   Elem* dequeue();                       // Dequeue Elem from front
00021 
00022   inline Elem* firstValue() const        // Get value of front Elem
00023   {
00024     assert( !isEmpty() );
00025     return front->element;
00026   }
00027 
00028   inline BOOL isEmpty() const            // Return TRUE if queue is empty
00029   {
00030     return front == NULL;
00031   }
00032 
00033   inline BOOL isFilled() const           // Return TRUE if queue is empty
00034   {
00035     return front != NULL;
00036   }
00037 
00038 private:
00039   SLink* front;                          // Pointer to front queue node
00040   SLink* rear;                           // Pointer to rear queue node
00041 };
00042 
00043 void LinkedQueue::clear()                // Remove all Elem's from the queue
00044 {
00045   while( front != NULL )                 // Return link nodes to freelist
00046   {
00047     rear  = front;
00048     front = front->next;
00049     delete rear;
00050   }
00051   rear = NULL;
00052 }
00053 
00054 // Enqueue Elem at rear of queue
00055 void LinkedQueue::enqueue( Elem* item ) 
00056 {
00057   if ( rear != NULL )                        // Queue not empty: add to end
00058   {
00059     rear = rear->next = new SLink( item, NULL );
00060   } 
00061   else 
00062   {
00063     front = rear = new SLink( item, NULL );    // Empty queue
00064   }
00065 }
00066 
00067 Elem* LinkedQueue::dequeue()                 // Dequeue Elem from front
00068 {
00069   assert( !isEmpty() );                      // Must be something to dequeue
00070 
00071   Elem*    temp = front->element;            // Store dequeued value
00072   SLink*  ltemp = front;                     // Hold onto dequeued link node
00073           front = front->next;               // Advance front
00074 
00075   delete ltemp;                              // Return link to free store
00076 
00077   if ( front == NULL )                       // Dequeued last element
00078   {
00079     rear = NULL;
00080   }
00081 
00082   return temp;                               // Return element value
00083 }
00084 
00085 #endif // End of LinkedQueue.hpp

Generated on Sun Oct 14 18:46:18 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001