A template for ring buffer implementation

Dependents:   AwsomeStation LoRaBaseStation LoRaTerminal

RingBuffer.h

Committer:
rba90
Date:
2016-07-23
Revision:
2:8949ad751081
Parent:
1:5f641cf190da
Child:
3:21ee07b29eb7

File content as of revision 2:8949ad751081:

#ifndef RINGBUFFER_H_
#define RINGBUFFER_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