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:
- 4:cd0a1f4c623f
- Parent:
- 2:d13a72146516
- Parent:
- 3:c2de0ddfe65b
- Child:
- 5:7b754354b99c
--- a/Buffer.h Thu May 23 23:48:36 2013 +0000
+++ b/Buffer.h Wed Jun 26 15:24:27 2013 +0000
@@ -64,15 +64,13 @@
T *_buf;
volatile uint32_t _wloc;
volatile uint32_t _rloc;
- uint32_t _sizemask;
-
- enum BUFFER_SIZE{SMALL = 0x100, MEDIUM = 0x400, LARGE = 0x1000};
+ uint32_t _size;
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
*/
@@ -124,5 +122,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
Sam Grove

