Line data Source code
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 330504 : template< typename T > bool LFQueue< T >::pop( T& result )
36 : {
37 330504 : LB_TS_SCOPED( _reader );
38 330504 : if( _readPos == _writePos )
39 0 : return false;
40 :
41 330504 : result = _data[ _readPos ];
42 330504 : _readPos = (_readPos + 1) % _data.size();
43 330504 : return true;
44 : }
45 :
46 410035 : template< typename T > bool LFQueue< T >::getFront( T& result )
47 : {
48 410035 : LB_TS_SCOPED( _reader );
49 410035 : if( _readPos == _writePos )
50 79531 : return false;
51 :
52 330504 : result = _data[ _readPos ];
53 330504 : return true;
54 : }
55 :
56 887866 : template< typename T > bool LFQueue< T >::push( const T& element )
57 : {
58 887866 : LB_TS_SCOPED( _writer );
59 887866 : int32_t nextPos = (_writePos + 1) % _data.size();
60 887866 : if( nextPos == _readPos )
61 556384 : return false;
62 :
63 331482 : _data[ _writePos ] = element;
64 331482 : _writePos = nextPos;
65 331482 : return true;
66 : }
67 : }
|