TPIE

2362a60
tpie::queue< T > Class Template Reference

Basic Implementation of I/O Efficient FIFO queue. More...

#include <tpie/queue.h>

Public Member Functions

 queue (cache_hint cacheHint=access_sequential, compression_flags compressionFlags=compression_normal)
 Constructor for Temporary Queue. More...
 
bool empty ()
 Check if the queue is empty. More...
 
stream_size_type size ()
 Returns the number of items currently on the queue. More...
 
void push (const T &t)
 Enqueue an item. More...
 
const T & pop ()
 Dequeues an item. More...
 
const T & front ()
 Returns at the frontmost item in the queue. More...
 

Static Public Member Functions

static memory_size_type memory_usage (double blockFactor=1.0)
 Compute the memory used by the queue. More...
 

Detailed Description

template<class T>
class tpie::queue< T >

Basic Implementation of I/O Efficient FIFO queue.

The queue uses a pop stream, a center queue, and a push stream, to model a queue. The front elements of the queue are the pop stream items, followed by the center queue items, followed by the push stream items.

Elements are pushed to the center queue. When the center queue is full, subsequent pushed elements are written to the push stream.

Elements are popped from the pop stream. When this is empty, the center queue is used instead. When the center queue is also empty, the push stream and the pop stream are swapped.

Definition at line 53 of file queue.h.

Constructor & Destructor Documentation

template<class T >
tpie::queue< T >::queue ( cache_hint  cacheHint = access_sequential,
compression_flags  compressionFlags = compression_normal 
)
inline

Constructor for Temporary Queue.

Definition at line 58 of file queue.h.

60  : m_size(0)
61  , m_queueA(1.0)
62  , m_queueB(1.0)
63  , m_centerQueue(get_block_size()/sizeof(T))
64  , m_currentQueue(true)
65  {
66  m_queueA.open(0, cacheHint, compressionFlags);
67  m_queueB.open(0, cacheHint, compressionFlags);
68  }
memory_size_type get_block_size()
Get the TPIE block size.

Member Function Documentation

template<class T >
bool tpie::queue< T >::empty ( )
inline

Check if the queue is empty.

Returns
true if the queue is empty otherwize false

Definition at line 74 of file queue.h.

74 {return m_size == 0;}
template<class T >
const T& tpie::queue< T >::front ( )
inline

Returns at the frontmost item in the queue.

Returns
The front most item in the queue

Definition at line 123 of file queue.h.

123  {
124  if(pop_queue().can_read())
125  return pop_queue().peek();
126  else if(!m_centerQueue.empty())
127  return m_centerQueue.front();
128  else {
129  swap_file_streams();
130  return pop_queue().peek();
131  }
132  }
template<class T >
static memory_size_type tpie::queue< T >::memory_usage ( double  blockFactor = 1.0)
inlinestatic

Compute the memory used by the queue.

Definition at line 137 of file queue.h.

137  {
138  return sizeof(queue<T>)
139  + 3*file_stream<T>::memory_usage(blockFactor) - 2*sizeof(file_stream<T>);
140  }
template<class T >
const T& tpie::queue< T >::pop ( )
inline

Dequeues an item.

Returns
The dequeued item

Definition at line 101 of file queue.h.

101  {
102  --m_size;
103  if(pop_queue().can_read()) {
104  // The front of the queue is the pop stream
105  return pop_queue().read();
106  } else if (!m_centerQueue.empty()) {
107  // The front of the queue is the center queue
108  const T & i = m_centerQueue.front();
109  m_centerQueue.pop();
110  return i;
111  } else {
112  // The front of the queue is the push stream,
113  // so we swap the push stream and the pop stream.
114  swap_file_streams();
115  return pop_queue().read();
116  }
117  }
template<class T >
void tpie::queue< T >::push ( const T &  t)
inline

Enqueue an item.

Parameters
tThe item to be enqueued

Definition at line 86 of file queue.h.

References tpie::queue< T >::size().

86  {
87  if (push_queue().size() == 0 && !m_centerQueue.full()) {
88  // The back of the queue is the center queue
89  m_centerQueue.push(t);
90  } else {
91  // The back of the queue is the push stream
92  push_queue().write(t);
93  }
94  ++m_size;
95  }
stream_size_type size()
Returns the number of items currently on the queue.
Definition: queue.h:80
template<class T >
stream_size_type tpie::queue< T >::size ( )
inline

Returns the number of items currently on the queue.

Returns
Number of itmes in the queue

Definition at line 80 of file queue.h.

Referenced by tpie::queue< T >::push().

80 {return m_size;}

The documentation for this class was generated from the following file: