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");
 }
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