/* * Buffer.h * * Created on: 03 апр. 2015 г. * Author: esaulenko */ #ifndef _BUFFER_H_ #define _BUFFER_H_ #include // простейший кольцевой буфер. // проверки при добавлении/извлечении данных отсутствуют, надо проверять отдельно!! template class CircularBuffer { private: Type buff[Size]; volatile uint32_t putIdx; volatile uint32_t getIdx; public: CircularBuffer() { Flush (); } void Put (const Type & data) { buff[putIdx] = data; putIdx = (putIdx + 1) % Size; } Type Get () { Type data = buff[getIdx]; getIdx = (getIdx + 1) % Size; return data; } Type & View () { return buff[getIdx]; } uint32_t Avail () const { int32_t avail = putIdx - getIdx; if (avail < 0) avail += Size; return avail; } uint32_t Free () const { int32_t free = getIdx - putIdx - 1; if (free < 0) free += Size; return free; } void Flush () { putIdx = getIdx = 0; } }; #endif /* _BUFFER_H_ */