MNE-CPP  beta 1.0
circularmultichannelbuffer_old.h
Go to the documentation of this file.
1 //=============================================================================================================
36 #ifndef CIRCULARMULTICHANNELBUFFEROLD_H
37 #define CIRCULARMULTICHANNELBUFFEROLD_H
38 
39 
40 //*************************************************************************************************************
41 //=============================================================================================================
42 // INCLUDES
43 //=============================================================================================================
44 
45 #include "circularbuffer_old.h"
46 
47 
48 //*************************************************************************************************************
49 //=============================================================================================================
50 // STL INCLUDES
51 //=============================================================================================================
52 
53 #include <QVector>
54 
55 
56 //*************************************************************************************************************
57 //=============================================================================================================
58 // QT STL INCLUDES
59 //=============================================================================================================
60 
61 
62 //*************************************************************************************************************
63 //=============================================================================================================
64 // QT INCLUDES
65 //=============================================================================================================
66 
67 
68 //*************************************************************************************************************
69 //=============================================================================================================
70 // DEFINE NAMESPACE IOBuffer
71 //=============================================================================================================
72 
73 namespace IOBuffer
74 {
75 
76 
77 //*************************************************************************************************************
78 //=============================================================================================================
79 // USED NAMESPACES
80 //=============================================================================================================
81 
82 
83 //=============================================================================================================
89 template<typename _Tp>
91 //template<typename _Tp>
92 //class RTMEAS_EXPORT CircularMultiChannelBuffer_old : public Buffer
93 {
94 public:
95  typedef QSharedPointer<CircularMultiChannelBuffer_old> SPtr;
96  typedef QSharedPointer<const CircularMultiChannelBuffer_old> ConstSPtr;
98  //=========================================================================================================
105  CircularMultiChannelBuffer_old(unsigned int uiNumChannels, unsigned int uiMaxNumElements);
106 
107  //=========================================================================================================
112 
113  //=========================================================================================================
117  void init();
118 
119  //=========================================================================================================
127  inline void push(unsigned int uiChannel, const _Tp* pArray, unsigned int size);
128 
129  //=========================================================================================================
136  inline void push(unsigned int uiChannel, const _Tp& newElement);
137 
138  //=========================================================================================================
144  inline void push(const QVector<_Tp>& newElements);
145 
146  //=========================================================================================================
152  inline QVector<_Tp> pop();
153 
154  //=========================================================================================================
161  inline _Tp pop(unsigned int uiChannel);
162 
163  //=========================================================================================================
167  inline int numChannels();
168 
169 
170  //=========================================================================================================
174  void clear();
175 
176 private:
177  QVector< CircularBuffer_old<_Tp>* >* m_qVecBuffers;
178 
179  unsigned int m_uiMaxNumElements;
182 };
183 
184 
185 //*************************************************************************************************************
186 //=============================================================================================================
187 // DEFINE MEMBER METHODS
188 //=============================================================================================================
189 
190 template<typename _Tp>
191 CircularMultiChannelBuffer_old<_Tp>::CircularMultiChannelBuffer_old(unsigned int uiNumChannels, unsigned int uiMaxNumElements)
192 : Buffer(typeid(_Tp).name())
193 , m_qVecBuffers(new QVector< CircularBuffer_old<_Tp>* >(uiNumChannels))
194 , m_uiMaxNumElements(uiMaxNumElements)
195 {
196  init();
197 }
198 
199 
200 //*************************************************************************************************************
201 
202 template<typename _Tp>
204 {
205  clear();
206  delete m_qVecBuffers;
207 }
208 
209 
210 //*************************************************************************************************************
211 
212 template<typename _Tp>
214 {
215 // clear();
216 // for (int i = 0; i < uiNumChannels; i++)
217 // m_qVecBuffers.push_back( new CircularBuffer<_Tp>(m_uiMaxNumElements) );
218 
219 
220  for (typename QVector< CircularBuffer_old<_Tp>* >::iterator i = m_qVecBuffers->begin(); i != m_qVecBuffers->end(); ++i) {
221  *i = new CircularBuffer_old<_Tp>(m_uiMaxNumElements);
222  }
223 
224 }
225 
226 
227 //*************************************************************************************************************
228 
229 template<typename _Tp>
231 {
232  return m_qVecBuffers->size();
233 }
234 
235 
236 //*************************************************************************************************************
237 
238 template<typename _Tp>
239 inline void CircularMultiChannelBuffer_old<_Tp>::push(unsigned int uiChannel, const _Tp* pArray, unsigned int size)
240 {
241  m_qVecBuffers[uiChannel]->push(pArray, size);
242 }
243 
244 
245 //*************************************************************************************************************
246 
247 template<typename _Tp>
248 inline void CircularMultiChannelBuffer_old<_Tp>::push(unsigned int uiChannel, const _Tp& newElement)
249 {
250  (*m_qVecBuffers)[uiChannel]->push(newElement);
251 }
252 
253 
254 //*************************************************************************************************************
255 
256 template<typename _Tp>
257 inline void CircularMultiChannelBuffer_old<_Tp>::push(const QVector<_Tp>& newElements)
258 {
259  for(int i = 0; i < newElements.size(); ++i)
260  (*m_qVecBuffers)[i]->push(newElements[i]);
261 }
262 
263 
264 //*************************************************************************************************************
265 
266 template<typename _Tp>
268 {
269  QVector<_Tp> elements;
270 
271  for (typename QVector< CircularBuffer_old<_Tp>* >::iterator i = m_qVecBuffers->begin(); i != m_qVecBuffers->end(); ++i) {
272  elements.push_back((*i)->pop());
273  }
274 
275  return elements;
276 }
277 
278 
279 //*************************************************************************************************************
280 
281 template<typename _Tp>
282 inline _Tp CircularMultiChannelBuffer_old<_Tp>::pop(unsigned int uiNumChannels)
283 {
284  return (*m_qVecBuffers)[uiNumChannels]->pop();
285 }
286 
287 
288 //*************************************************************************************************************
289 
290 template<typename _Tp>
292 {
293  for (typename QVector< CircularBuffer_old<_Tp>* >::iterator i = m_qVecBuffers->begin(); i != m_qVecBuffers->end(); ++i) {
294  delete i;
295  *i = NULL;
296  }
297 }
298 
299 
300 //*************************************************************************************************************
301 //=============================================================================================================
302 // TYPEDEF
303 //=============================================================================================================
304 
305 //ToDo Typedef -> warning visibility ignored -> dllexport/dllimport problem
306 
307 typedef GENERICSSHARED_EXPORT CircularMultiChannelBuffer_old<int> _int_CircularMultiChannelBuffer_old;
308 typedef GENERICSSHARED_EXPORT CircularMultiChannelBuffer_old<short> _short_CircularMultiChannelBuffer_old;
309 typedef GENERICSSHARED_EXPORT CircularMultiChannelBuffer_old<short*> _pShort_CircularMultiChannelBuffer_old;
310 typedef GENERICSSHARED_EXPORT CircularMultiChannelBuffer_old<char> _char_CircularMultiChannelBuffer_old;
311 typedef GENERICSSHARED_EXPORT CircularMultiChannelBuffer_old<double> _double_CircularMultiChannelBuffer_old;
312 typedef GENERICSSHARED_EXPORT CircularMultiChannelBuffer_old< QPair<int, int> > _int_int_pair_CircularMultiChannelBuffer_old;
313 typedef GENERICSSHARED_EXPORT CircularMultiChannelBuffer_old< QPair<double, double> > _double_double_pair_CircularMultiChannelBuffer_old;
315 } // NAMESPACE
316 
317 #endif // CIRCULARMULTICHANNELBUFFEROLD_H
QSharedPointer< const CircularMultiChannelBuffer_old > ConstSPtr
#define GENERICSSHARED_EXPORT
CircularMultiChannelBuffer_old(unsigned int uiNumChannels, unsigned int uiMaxNumElements)
Contains the declaration of the CircularBuffer_old class.
The TEMPLATE CIRCULAR BUFFER provides a template for thread safe circular buffers.
The TEMPLATE CIRCULAR BUFFER provides a template for thread safe circular buffers.
The Buffer class provides a base class for buffers.
Definition: buffer.h:63
void push(unsigned int uiChannel, const _Tp *pArray, unsigned int size)
QSharedPointer< CircularMultiChannelBuffer_old > SPtr