00001 #ifndef __J2K__Array_Queue_HPP__
00002 #define __J2K__Array_Queue_HPP__
00003
00004 #include <j2k/Fred/Standard.hpp>
00005
00006 #define LIST_SIZE 100
00007
00008 class ArrayQueue {
00009 public:
00010
00011
00012
00013 inline ArrayQueue()
00014 : size( LIST_SIZE + 1 ), front( 0 ), rear( 0 )
00015 {
00016 listarray = new Elem[size];
00017 }
00018
00019 inline ArrayQueue( unsigned long sz )
00020 : size( sz + 1 ), front( 0 ), rear( 0 )
00021 {
00022 listarray = new Elem[size];
00023 }
00024
00025 virtual ~ArrayQueue()
00026 {
00027 delete [] listarray;
00028 }
00029
00030 void clear()
00031 {
00032 front = rear;
00033 }
00034
00035 void enqueue( const Elem item );
00036 Elem dequeue();
00037
00038 Elem firstValue() const
00039 {
00040 assert( !isEmpty() );
00041 return listarray[ (front+1) % size ];
00042 }
00043
00044 BOOL isEmpty() const
00045 {
00046 return front == rear;
00047 }
00048
00049 private:
00050 unsigned long size;
00051 unsigned long front;
00052 unsigned long rear;
00053 Elem *listarray;
00054 };
00055
00056
00057 void ArrayQueue::enqueue( const Elem item )
00058 {
00059 assert( ((rear+1) % size) != front );
00060 rear = (rear+1) % size;
00061 listarray[rear] = item;
00062 }
00063
00064 Elem ArrayQueue::dequeue()
00065 {
00066 assert( !isEmpty() );
00067 front = (front+1) % size;
00068 return listarray[ front ];
00069 }
00070
00071 #endif // End of ArrayQueue.hpp