Buffer for general purpose use. Templated for most datatypes
Dependents: BufferedSoftSerial 09_PT1000 10_PT1000 11_PT1000 ... more
Example
#include "mbed.h" #include "Buffer.h" Buffer <char> buf; int main() { buf = 'a'; buf.put('b'); char *head = buf.head(); puts(head); char whats_in_there[2] = {0}; int pos = 0; while(buf.available()) { whats_in_there[pos++] = buf; } printf("%c %c\n", whats_in_there[0], whats_in_there[1]); buf.clear(); error("done\n\n\n"); }
Diff: Buffer.h
- Revision:
- 3:c2de0ddfe65b
- Parent:
- 1:490224f41c09
- Child:
- 4:cd0a1f4c623f
diff -r 490224f41c09 -r c2de0ddfe65b Buffer.h --- a/Buffer.h Thu May 23 19:26:31 2013 +0000 +++ b/Buffer.h Wed Jun 26 15:19:45 2013 +0000 @@ -65,14 +65,12 @@ volatile uint32_t _wloc; volatile uint32_t _rloc; uint32_t _size; - - enum BUFFER_SIZE{SMALL = 0x100, MEDIUM = 0x400, LARGE = 0x1000}; public: /** Create a Buffer and allocate memory for it - * @param size An enum from BUFFER_SIZE. + * @param size The size of the buffer */ - Buffer(BUFFER_SIZE size = Buffer::SMALL); + Buffer(uint32_t size = 0x100); /** Destry a Buffer and release it's allocated memory */ @@ -122,5 +120,37 @@ }; +template <class T> +inline void Buffer<T>::put(T data) +{ + _buf[_wloc++] = data; + _wloc %= (_size-1); + + return; +} + +template <class T> +inline T Buffer<T>::get(void) +{ + T data_pos = _buf[_rloc++]; + _rloc %= (_size-1); + + return data_pos; +} + +template <class T> +inline T *Buffer<T>::head(void) +{ + T *data_pos = &_buf[0]; + + return data_pos; +} + +template <class T> +inline uint32_t Buffer<T>::available(void) +{ + return (_wloc == _rloc) ? 0 : 1; +} + #endif