Ring Buffer reconciled with RTOS. If with using RTOS, this lib is enabled Mutex. Default RingBuffer size is 256 Bytes, Max size is 1024 Bytes.

Dependents:   RN41 HC05 HC05 mySerial ... more

RingBuffer.cpp

Committer:
AkinoriHashimoto
Date:
2015-10-30
Revision:
0:5373472190f5
Child:
1:8f2a3144902b

File content as of revision 0:5373472190f5:

#include "RingBuffer.h"

RingBuffer::RingBuffer(unsigned int size)
{
    empty= true;
    idxF= idxR= 0;
    buf= new char[size];
    bufSize= size;
}
RingBuffer::~RingBuffer()
{
    delete [] buf;
}



bool RingBuffer::set(string &str)
{
    int size= str.size();
    for(int idx= 0; idx < size; idx++)
        if(this->set( (char)str[idx] ))    // True:FULL
            return true;
    return false;
}

bool RingBuffer::set(char chr)
{
    if((idxR == idxF) && !empty)    // R==F: empty or full
        return true;    // means FULL

// mutex for RTOS
#ifdef RTOS_H
    mutex.lock();
#endif
    buf[idxR] = chr;
    idxR++;
    idxR %= bufSize;
    empty= false;
#ifdef RTOS_H
    mutex.unlock();
#endif
    if(idxR == idxF)
        return true;
    return false;
}

string RingBuffer::get()
{
    if(empty)
        return "";

    string str;
//    int idx= idxF;
    while(!empty) {
        str += buf[idxF];
        idxF++;
        idxF %= bufSize;
        if(idxF == idxR)
            empty= true;
    }
    return str;
}

//eof