Skytraq S1315F-RAW-EVK Logger

Dependencies:   TextLCD mbed

Revision:
0:e0ec137da369
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libT/portable/tringbuffer.h	Sat Dec 18 11:17:21 2010 +0000
@@ -0,0 +1,64 @@
+
+#ifndef __TRINGBUFFER_H
+#define __TRINGBUFFER_H
+
+#include "tversion.h"
+
+namespace libT {
+
+template <class T>
+class tRingBuffer : public tVersion
+{
+public:
+
+    tRingBuffer(void) : tVersion(0x20100721/* 2010-07-21 */,0x00000001UL),wp(0),rp(0) {}
+
+    inline void reset(void){wp = rp = 0;}
+
+    inline int writable(void) const
+    {
+        return (inc(wp) != rp) ? 1 : 0;
+    }
+
+    inline int write(T _c)
+    {
+        int retval = -1;    /* Ringbuffer FULL */
+        if(writable()){
+            array[wp] = _c;
+            wp = inc(wp);
+            retval = 0;    /* OK */
+        }
+        return retval;
+    }
+
+    inline int readable(void) const
+    {
+        return (rp != wp) ? 1 : 0;
+    }
+
+    inline int read(T *_c)
+    {
+        int retval = -1;    /* Ringbuffer empty or _c is invalid*/
+        if((readable()) && (_c != 0)){
+            *_c = array[rp];
+            rp = inc(rp);
+            retval = 0;    /* OK */
+        }
+        return retval;
+    }
+
+private:
+    enum {TRINGBUFFER_SIZE=0x200};
+    inline unsigned short inc(unsigned short _p) const
+    {
+        return static_cast<unsigned short>(static_cast<unsigned short>(_p + 1) & (sizeof(array)-1));
+    }
+    volatile unsigned short wp;
+    volatile unsigned short rp;
+    volatile T array[TRINGBUFFER_SIZE];
+};
+
+};
+
+#endif /* __TRINGBUFFER_H */
+