21 template< 
typename T, 
size_t S >
 
   27         std::deque< T > copy = from._queue;
 
   28         const size_t maxSize = from._maxSize;
 
   40 template< 
typename T, 
size_t S >
 
   44     while( _queue.size() <= index )
 
   47     LBASSERT( _queue.size() > index );
 
   48     const T& element = _queue[index];
 
   53 template< 
typename T, 
size_t S >
 
   57     while( _queue.size() > maxSize )
 
   64 template< 
typename T, 
size_t S >
 
   67     LBASSERT( minSize <= _maxSize );
 
   69     while( _queue.size() < minSize )
 
   71     const size_t size = _queue.size();
 
   76 template< 
typename T, 
size_t S >
 
   85 template< 
typename T, 
size_t S >
 
   89     while( _queue.empty( ))
 
   92     LBASSERT( !_queue.empty( ));
 
   93     T element = _queue.front();
 
  100 template< 
typename T, 
size_t S >
 
  104     while( _queue.empty( ))
 
  106         if( !_cond.timedWait( timeout ))
 
  112     LBASSERT( !_queue.empty( ));
 
  113     element = _queue.front();
 
  120 template< 
typename T, 
size_t S > std::vector< T >
 
  122                                 const size_t maximum )
 
  124     std::vector< T > result;
 
  127     while( _queue.size() < minimum )
 
  129         if( !_cond.timedWait( timeout ))
 
  136     const size_t size = 
LB_MIN( maximum, _queue.size( ));
 
  138     result.reserve( size );
 
  139     result.insert( result.end(), _queue.begin(), _queue.begin() + size );
 
  140     _queue.erase( _queue.begin(), _queue.begin() + size );
 
  146 template< 
typename T, 
size_t S >
 
  156     result = _queue.front();
 
  163 template< 
typename T, 
size_t S >
 
  167     const size_t size = 
LB_MIN( num, _queue.size( ));
 
  170         result.reserve( result.size() + size );
 
  171         for( 
size_t i = 0; i < size; ++i )
 
  173             result.push_back( _queue.front( ));
 
  193     explicit Group( 
const size_t height ) : height_( height ), waiting_( 0 ) {}
 
  196     void setHeight( 
const size_t height ) { height_ = height; }
 
  199 template< 
typename T, 
size_t S >
 
  202     LBASSERT( barrier.height_ > 0 )
 
  206     while( _queue.empty() && barrier.waiting_ < barrier.height_ )
 
  211         LBASSERT( barrier.waiting_ == barrier.height_ );
 
  217     element = _queue.front();
 
  226 template< 
typename T, 
size_t S >
 
  236     result = _queue.front();
 
  241 template< 
typename T, 
size_t S >
 
  251     result = _queue.back();
 
  256 template< 
typename T, 
size_t S >
 
  260     while( _queue.size() >= _maxSize )
 
  262     _queue.push_back( element );
 
  267 template< 
typename T, 
size_t S >
 
  271     LBASSERT( elements.size() <= _maxSize );
 
  272     while( (_maxSize - _queue.size( )) < elements.size( ))
 
  274     _queue.insert( _queue.end(), elements.begin(), elements.end( ));
 
  279 template< 
typename T, 
size_t S >
 
  283     while( _queue.size() >= _maxSize )
 
  285     _queue.push_front( element );
 
  290 template< 
typename T, 
size_t S >
 
  294     LBASSERT( elements.size() <= _maxSize );
 
  295     while( (_maxSize - _queue.size( )) < elements.size( ))
 
  297     _queue.insert(_queue.begin(), elements.begin(), elements.end());
 
std::vector< T > timedPopRange(const unsigned timeout, const size_t minimum=1, const size_t maximum=S)
Retrieve a number of items from the front of the queue. 
 
bool tryPop(T &result)
Retrieve and pop the front element from the queue if it is not empty. 
 
LUNCHBOX_API void lock()
Lock the mutex. 
 
MTQueue< T, S > & operator=(const MTQueue< T, S > &from)
Assign the values of another queue. 
 
void pushFront(const T &element)
Push a new element to the front of the queue. 
 
size_t waitSize(const size_t minSize) const 
Wait for the size to be at least the number of given elements. 
 
void clear()
Reset (empty) the queue. 
 
A thread-safe queue with a blocking read access. 
 
const T & operator[](const size_t index) const 
Retrieve the requested element from the queue, may block. 
 
Group(const size_t height)
Construct a new group of the given size. 
 
bool getFront(T &result) const 
 
bool popBarrier(T &result, Group &barrier)
Retrieve the front element, or abort if the barrier is reached. 
 
#define LB_MIN(a, b)
returns the minimum of two values 
 
void setHeight(const size_t height)
Update the height. 
 
void setMaxSize(const size_t maxSize)
Set the new maximum size of the queue. 
 
bool getBack(T &result) const 
 
bool timedPop(const unsigned timeout, T &element)
Retrieve and pop the front element from the queue. 
 
Group descriptor for popBarrier(). 
 
T pop()
Retrieve and pop the front element from the queue, may block. 
 
LUNCHBOX_API void unlock()
Unlock the mutex. 
 
void push(const T &element)
Push a new element to the back of the queue.