A template for ring buffer implementation

Dependents:   AwsomeStation LoRaBaseStation LoRaTerminal

Revision:
1:5f641cf190da
Parent:
0:36b372831d9e
Child:
2:8949ad751081
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RingBuffer.h	Sat Jul 23 07:39:05 2016 +0000
@@ -0,0 +1,57 @@
+#ifndef BUFFER_H_
+#define BUFFER_H_
+
+#define DEFAULT_MAX_BUFFER_SZ 64
+
+#include "stdint.h"
+
+template <typename T>
+class CircularBuffer
+{
+private:
+    const uint32_t buffer_size;
+    uint32_t read_ptr;
+    uint32_t write_ptr;
+    uint32_t count;
+    
+    // mutex lock
+    bool mux; 
+    
+    // overflow
+    bool is_over_flow;
+    
+    // container
+    T *data;
+    
+    
+public:
+    CircularBuffer(const uint32_t size=DEFAULT_MAX_BUFFER_SZ);
+    ~CircularBuffer();
+    
+    // psudo mutex
+    bool isLocked();
+    void lock();
+    void unlock();
+    
+    // enqueue and dequeue
+    void enqueue(T in);
+    T dequeue();
+    
+    // pointer operation
+    uint32_t getReadPtr();
+    uint32_t getWritePtr();
+    uint32_t getCounter();
+    
+    // overflow
+    bool getOverFlow();
+    void clearOverFlow();
+    
+    // operation
+    T first();
+    T last();
+    
+    // random access
+    T operator[](uint32_t idx);
+};
+
+#endif
\ No newline at end of file