Lunchbox  1.15.0
Multi-threaded C++ toolbox library for all application developers creating high-performance multi-threaded programs.
lfQueue.ipp
1 
2 /* Copyright (c) 2010-2013, Stefan Eilemann <eile@equalizergraphics.com>
3  *
4  * This library is free software; you can redistribute it and/or modify it under
5  * the terms of the GNU Lesser General Public License version 2.1 as published
6  * by the Free Software Foundation.
7  *
8  * This library is distributed in the hope that it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10  * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11  * details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this library; if not, write to the Free Software Foundation, Inc.,
15  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16  */
17 
18 namespace lunchbox
19 {
20 template< typename T > void LFQueue< T >::clear()
21 {
22  LB_TS_SCOPED( _reader );
23  _readPos = 0;
24  _writePos = 0;
25 }
26 
27 template< typename T > void LFQueue< T >::resize( const int32_t size )
28 {
29  LBASSERT( isEmpty( ));
30  _readPos = 0;
31  _writePos = 0;
32  _data.resize( size + 1 );
33 }
34 
35 template< typename T > bool LFQueue< T >::pop( T& result )
36 {
37  LB_TS_SCOPED( _reader );
38  if( _readPos == _writePos )
39  return false;
40 
41  result = _data[ _readPos ];
42  _readPos = (_readPos + 1) % _data.size();
43  return true;
44 }
45 
46 template< typename T > bool LFQueue< T >::getFront( T& result )
47 {
48  LB_TS_SCOPED( _reader );
49  if( _readPos == _writePos )
50  return false;
51 
52  result = _data[ _readPos ];
53  return true;
54 }
55 
56 template< typename T > bool LFQueue< T >::push( const T& element )
57 {
58  LB_TS_SCOPED( _writer );
59  int32_t nextPos = (_writePos + 1) % _data.size();
60  if( nextPos == _readPos )
61  return false;
62 
63  _data[ _writePos ] = element;
64  _writePos = nextPos;
65  return true;
66 }
67 }
bool pop(T &result)
Retrieve and pop the front element from the queue.
Definition: lfQueue.ipp:35
void clear()
Reset (empty) the queue.
Definition: lfQueue.ipp:20
void resize(const int32_t size)
Resize and reset the queue.
Definition: lfQueue.ipp:27
bool getFront(T &result)
Retrieve the front element from the queue.
Definition: lfQueue.ipp:46
Abstraction layer and common utilities for multi-threaded programming.
Definition: algorithm.h:32
bool push(const T &element)
Push a new element to the back of the queue.
Definition: lfQueue.ipp:56