A template for ring buffer implementation
Dependents: AwsomeStation LoRaBaseStation LoRaTerminal
Diff: RingBuffer.h
- 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