A template for ring buffer implementation
Dependents: AwsomeStation LoRaBaseStation LoRaTerminal
RingBuffer.h@3:21ee07b29eb7, 2016-09-01 (annotated)
- 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?
User | Revision | Line number | New 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 |