2 * fifo_buffer.h - FIFO fixed-size buffer
4 * Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
6 * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
25 #ifndef _FIFO_BUFFER_H
26 #define _FIFO_BUFFER_H
28 #include <QtCore/QSemaphore>
35 fifoBuffer( int _size
) :
36 m_reader_sem( _size
),
37 m_writer_sem( _size
),
42 m_buffer
= new T
[_size
];
43 m_reader_sem
.acquire( _size
);
49 m_reader_sem
.release( m_size
);
52 void write( T _element
)
54 m_writer_sem
.acquire();
55 m_buffer
[m_writer_index
++] = _element
;
56 m_writer_index
%= m_size
;
57 m_reader_sem
.release();
62 m_reader_sem
.acquire();
63 T element
= m_buffer
[m_reader_index
++];
64 m_reader_index
%= m_size
;
65 m_writer_sem
.release();
71 return( m_reader_sem
.available() );
76 QSemaphore m_reader_sem
;
77 QSemaphore m_writer_sem
;