A template for ring buffer implementation

Dependents:   AwsomeStation LoRaBaseStation LoRaTerminal

Committer:
rba90
Date:
Thu Sep 01 04:01:40 2016 +0000
Revision:
3:21ee07b29eb7
Parent:
2:8949ad751081
Child:
7:3e06927ef5ec
use size_t as indices of ringbuffer class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rba90 2:8949ad751081 1 #ifndef RINGBUFFER_H_
rba90 2:8949ad751081 2 #define RINGBUFFER_H_
rba90 0:36b372831d9e 3
rba90 0:36b372831d9e 4 #define DEFAULT_MAX_BUFFER_SZ 64
rba90 0:36b372831d9e 5
rba90 3:21ee07b29eb7 6 #include <stdint.h>
rba90 3:21ee07b29eb7 7 #include <stdlib.h>
rba90 0:36b372831d9e 8
rba90 0:36b372831d9e 9 template <typename T>
rba90 0:36b372831d9e 10 class CircularBuffer
rba90 0:36b372831d9e 11 {
rba90 0:36b372831d9e 12 private:
rba90 3:21ee07b29eb7 13 const size_t buffer_size;
rba90 3:21ee07b29eb7 14 size_t read_ptr;
rba90 3:21ee07b29eb7 15 size_t write_ptr;
rba90 3:21ee07b29eb7 16 size_t count;
rba90 0:36b372831d9e 17
rba90 0:36b372831d9e 18 // mutex lock
rba90 0:36b372831d9e 19 bool mux;
rba90 0:36b372831d9e 20
rba90 0:36b372831d9e 21 // overflow
rba90 0:36b372831d9e 22 bool is_over_flow;
rba90 0:36b372831d9e 23
rba90 0:36b372831d9e 24 // container
rba90 0:36b372831d9e 25 T *data;
rba90 0:36b372831d9e 26
rba90 0:36b372831d9e 27
rba90 0:36b372831d9e 28 public:
rba90 3:21ee07b29eb7 29 CircularBuffer(const size_t size=DEFAULT_MAX_BUFFER_SZ);
rba90 0:36b372831d9e 30 ~CircularBuffer();
rba90 0:36b372831d9e 31
rba90 0:36b372831d9e 32 // psudo mutex
rba90 0:36b372831d9e 33 bool isLocked();
rba90 0:36b372831d9e 34 void lock();
rba90 0:36b372831d9e 35 void unlock();
rba90 0:36b372831d9e 36
rba90 0:36b372831d9e 37 // enqueue and dequeue
rba90 0:36b372831d9e 38 void enqueue(T in);
rba90 0:36b372831d9e 39 T dequeue();
rba90 0:36b372831d9e 40
rba90 0:36b372831d9e 41 // pointer operation
rba90 3:21ee07b29eb7 42 size_t getReadPtr();
rba90 3:21ee07b29eb7 43 size_t getWritePtr();
rba90 3:21ee07b29eb7 44 size_t getCounter();
rba90 0:36b372831d9e 45
rba90 0:36b372831d9e 46 // overflow
rba90 0:36b372831d9e 47 bool getOverFlow();
rba90 0:36b372831d9e 48 void clearOverFlow();
rba90 0:36b372831d9e 49
rba90 0:36b372831d9e 50 // operation
rba90 0:36b372831d9e 51 T first();
rba90 0:36b372831d9e 52 T last();
rba90 0:36b372831d9e 53
rba90 0:36b372831d9e 54 // random access
rba90 3:21ee07b29eb7 55 T operator[](size_t idx);
rba90 0:36b372831d9e 56 };
rba90 0:36b372831d9e 57
rba90 0:36b372831d9e 58 #endif