36 #ifndef CIRCULARBUFFEROLD_H
37 #define CIRCULARBUFFEROLD_H
91 template<
typename _Tp>
95 typedef QSharedPointer<CircularBuffer_old>
SPtr;
96 typedef QSharedPointer<const CircularBuffer_old>
ConstSPtr;
119 inline void push(
const _Tp* pArray,
unsigned int size);
126 inline void push(
const _Tp& newElement);
148 inline unsigned int mapIndex(
int& index);
149 unsigned int m_uiMaxNumElements;
151 int m_iCurrentReadIndex;
152 int m_iCurrentWriteIndex;
153 QSemaphore* m_pFreeElements;
154 QSemaphore* m_pUsedElements;
163 template<
typename _Tp>
165 :
Buffer(typeid(_Tp).name())
166 , m_uiMaxNumElements(uiMaxNumElements)
167 , m_pBuffer(new _Tp[m_uiMaxNumElements])
168 , m_iCurrentReadIndex(-1)
169 , m_iCurrentWriteIndex(-1)
170 , m_pFreeElements(new QSemaphore(m_uiMaxNumElements))
171 , m_pUsedElements(new QSemaphore(0))
179 template<
typename _Tp>
182 delete m_pFreeElements;
183 delete m_pUsedElements;
190 template<
typename _Tp>
193 m_pFreeElements->acquire(size);
194 for(
unsigned int i = 0; i < size; ++i)
195 m_pBuffer[mapIndex(m_iCurrentWriteIndex)] = pArray[i];
196 m_pUsedElements->release(size);
202 template<
typename _Tp>
205 m_pFreeElements->acquire();
206 m_pBuffer[mapIndex(m_iCurrentWriteIndex)] = newElement;
207 m_pUsedElements->release();
213 template<
typename _Tp>
216 m_pUsedElements->acquire();
217 _Tp element = m_pBuffer[mapIndex(m_iCurrentReadIndex)];
218 m_pFreeElements->release();
226 template<
typename _Tp>
229 return index = ++index % m_uiMaxNumElements;
235 template<
typename _Tp>
238 delete m_pFreeElements;
239 m_pFreeElements =
new QSemaphore(m_uiMaxNumElements);
240 delete m_pUsedElements;
241 m_pUsedElements =
new QSemaphore(0);
243 m_iCurrentReadIndex = -1;
244 m_iCurrentWriteIndex = -1;
277 #endif // CIRCULARBUFFEROLD_H
QSharedPointer< CircularBuffer_old > SPtr
#define GENERICSSHARED_EXPORT
QSharedPointer< const CircularBuffer_old > ConstSPtr
generics library export/import macros.
CircularBuffer_old(unsigned int uiMaxNumElements)
The TEMPLATE CIRCULAR BUFFER provides a template for thread safe circular buffers.
Contains the declaration of the Buffer base class.
The Buffer class provides a base class for buffers.
void push(const _Tp *pArray, unsigned int size)