![]() |
Mixxx
|
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 */