Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed 4DGL-uLCD-SE mbed-rtos nRF24L01P
CircularBuf.cpp
- Committer:
- Nurchu
- Date:
- 2018-04-23
- Revision:
- 29:0c6f3c0c992a
- Parent:
- 20:e068469ffb89
- Child:
- 31:39d04aedc3e5
File content as of revision 29:0c6f3c0c992a:
#include "CircularBuf.h" #include "stdio.h" template <typename T> CircularBuf<T>::CircularBuf(unsigned int size) : _size(size), _head(-1), _tail(-1) { _data = new T[size]; } template <typename T> CircularBuf<T>::~CircularBuf() { delete _data; } template <typename T> unsigned int CircularBuf<T>::push(T* data, unsigned int size) { unsigned int cnt = 0; for (int i = 0; i < size; i++) { unsigned int next = _head + 1; if (next >= _size) next = 0; if (next == _tail) return cnt; _data[next] = data[cnt]; _head = next; cnt++; } return cnt; } template <typename T> unsigned int CircularBuf<T>::pop(T* data, unsigned int size) { unsigned int cnt = 0; for (int i = 0; i < size; i++) { unsigned int next = _tail + 1; printf("Next %d\n\r", next); if (next >= size) next = 0; printf("Head %d\n\r", _head); if (next == _head) return cnt; printf("Tail %d\n\r", _tail); printf("Cnt %d\n\r", cnt); printf("Data[cnt] %d\n\r", data[cnt]); printf("_Data[next] %d\n\r", _data[next]); printf("&Data %x &_Data %x\n\r", data, &_data[0]); data[cnt] = _data[next]; _tail = next; printf("Next %d\n\r", next); printf("Tail %d\n\r", _tail); cnt++; } return cnt; } template <typename T> unsigned int CircularBuf<T>::size() { int s = _head - _tail; // If buffer overlaps end if (s < 0) s += _size; return s; } template <typename T> void CircularBuf<T>::clear() { _head = 0; _tail = 0; }