Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef __CIRCLEBUFFER_H
- #define __CIRCLEBUFFER_H
- template <short size>
- class circleBuffer{
- public:
- short indexPut, indexGet; //индекс записи и индекс считывания
- short bufferSpace; //счетчик заполнености буффера
- short max; //размер буфера
- unsigned char buffer[size]; //буфер
- circleBuffer(){
- max = size;
- for(short i = 0; i < max; i++){
- buffer[i] = 0;
- }
- indexPut = 0;
- indexGet = 0;
- bufferSpace = 0;
- }
- inline void putNextByte(unsigned char val){ //ложим байт в буфер
- TCritSect cs; //критическая секция
- bufferSpace++;
- if((indexPut+1) < max){
- indexPut++;
- }else{
- indexPut = 0;
- }
- buffer[indexPut] = val;
- }
- inline short getFreeSpaceBuffer(){ //возвращаем свободное место в буфере
- return (max - 1) - bufferSpace;
- }
- inline bool getNextByte(unsigned char *val){ //считываем байт из буфер true если прочитали, false если буфер пуст
- TCritSect cs; //критическая секция
- if(bufferSpace > 0){
- if(indexGet+1 < max){
- indexGet++;
- }else{
- indexGet = 0;
- }
- bufferSpace--;
- }else{
- return false;//буфер пуст
- }
- *val = buffer[indexGet];
- return true;
- }
- };
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement