Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/util/fifo.h

Go to the documentation of this file.
00001 #ifndef FIFO_H
00002 #define FIFO_H
00003 
00004 #include "util/pa_ringbuffer.h"
00005 #include "util.h"
00006 
00007 template <class DataType>
00008 class FIFO {
00009   public:
00010     explicit FIFO(int size) {
00011         m_data = new DataType[size];
00012         Q_ASSERT(PaUtil_InitializeRingBuffer(
00013             &m_ringBuffer, sizeof(DataType), size, m_data) == 0);
00014     }
00015     virtual ~FIFO() {
00016         delete [] m_data;
00017     }
00018     int readAvailable() const {
00019         return PaUtil_GetRingBufferReadAvailable(&m_ringBuffer);
00020     }
00021     int writeAvailable() const {
00022         return PaUtil_GetRingBufferWriteAvailable(&m_ringBuffer);
00023     }
00024     int read(DataType* pData, int count) {
00025         return PaUtil_ReadRingBuffer(&m_ringBuffer, pData, count);
00026     }
00027     int write(const DataType* pData, int count) {
00028         return PaUtil_WriteRingBuffer(&m_ringBuffer, pData, count);
00029     }
00030     void writeBlocking(const DataType* pData, int count) {
00031         int written = 0;
00032         while (written != count) {
00033             int i = write(pData, count);
00034             pData += i;
00035             written += i;
00036         }
00037     }
00038   private:
00039     DataType* m_data;
00040     PaUtilRingBuffer m_ringBuffer;
00041     DISALLOW_COPY_AND_ASSIGN(FIFO<DataType>);
00042 };
00043 
00044 #endif /* FIFO_H */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines