General purpose ring buffer library. RTOS proof, mutex protected.
Dependents: RingBuffer_RTOS_test
Fork of RingBuffer by
RingBuffer.cpp
- Committer:
- ykuroda
- Date:
- 2012-09-27
- Revision:
- 2:ea6d02ba96ae
- Parent:
- 1:1c3a10f2eb04
- Child:
- 3:9adf0d5e0522
File content as of revision 2:ea6d02ba96ae:
// // RingBuffer.cpp ... General purpose ring buffer library // // Copyright 2012 Yoji KURODA // // 2009.11.13 ... Originally written in C by Y.Kuroda for Renesas H83664 // 2012.08.31 ... Code convert for mbed in C++ // #include "string.h" #include "RingBuffer.h" /* * Machine Independent Area */ RingBuffer::RingBuffer(int _bufsize) : bufsize(_bufsize) { buf = new unsigned char [bufsize+1]; sp = ep = buf; memset(buf,0,bufsize); } RingBuffer::~RingBuffer() { delete [] buf; } int RingBuffer::save(unsigned char c) { if( (ep==sp-1)|| ((sp==buf)&& (ep==buf+bufsize-1)) ) /* buffer full */ return 0; *ep = c; ep++; if(ep > buf+bufsize) ep = buf; return 1; } unsigned char RingBuffer::read(void) { unsigned char ret; if(sp == ep) return 0; /* buffer empty */ ret = *sp; *sp = 0; sp++; if(sp > buf+bufsize) sp = buf; return ret; } int RingBuffer::check(void) { int n = ep-sp; if(n<0) n = bufsize-n; return n; }