Buffer from Sam Grove changed to have static instead of dynamic memory allocation. Fixed size to 256B.
Dependents: BufferedSerialStatic
Fork of Buffer by
Revision 0:5e4bca1bd5f7, committed 2013-05-10
- Comitter:
- sam_grove
- Date:
- Fri May 10 18:34:16 2013 +0000
- Child:
- 1:490224f41c09
- Commit message:
- First version - implements basic functionality and overloaded members
Changed in this revision
Buffer.cpp | Show annotated file Show diff for this revision Revisions of this file |
Buffer.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Buffer.cpp Fri May 10 18:34:16 2013 +0000 @@ -0,0 +1,74 @@ + +#include "Buffer.h" + +template <class T> +Buffer<T>::Buffer(BUFFER_SIZE size) +{ + _buf = new T [size]; + _size = size; + clear(); + + return; +} + +template <class T> +Buffer<T>::~Buffer() +{ + delete [] _buf; + + return; +} + +template <class T> +void Buffer<T>::put(T data) +{ + _buf[_wloc++] = data; + _wloc &= (_size-1); + + return; +} + +template <class T> +T Buffer<T>::get(void) +{ + T data_pos = _buf[_rloc++]; + _rloc &= (_size-1); + + return data_pos; +} + +template <class T> +T *Buffer<T>::head(void) +{ + T *data_pos = &_buf[0]; + + return data_pos; +} + +template <class T> +void Buffer<T>::clear(void) +{ + memset(_buf, 0, _size); + _wloc = 0; + _rloc = 0; + + return; +} + +template <class T> +uint32_t Buffer<T>::available(void) +{ + return (_wloc == _rloc) ? 0 : 1; +} + +template class Buffer<uint8_t>; +template class Buffer<int8_t>; +template class Buffer<uint16_t>; +template class Buffer<int16_t>; +template class Buffer<uint32_t>; +template class Buffer<int32_t>; +template class Buffer<uint64_t>; +template class Buffer<int64_t>; +template class Buffer<char>; +template class Buffer<wchar_t>; +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Buffer.h Fri May 10 18:34:16 2013 +0000 @@ -0,0 +1,33 @@ + +#ifndef BUFFER_H +#define BUFFER_H + +#include <stdint.h> +#include <string.h> + +template <typename T> +class Buffer +{ +private: + T *_buf; + uint32_t _wloc; + uint32_t _rloc; + uint32_t _size; + + enum BUFFER_SIZE{SMALL = 0x100, MEDIUM = 0x400, LARGE = 0x1000}; + +public: + Buffer(BUFFER_SIZE size = Buffer::SMALL); + ~Buffer(); + + void put(T data); + T get(void); + T *head(void); + void clear(void); + Buffer &operator= (T data){put(data);return *this;} + uint32_t available(void); + +}; + +#endif +