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