2andnot

Untitled

Oct 17th, 2020
487
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #ifndef __CIRCLEBUFFER_H
  2.     #define __CIRCLEBUFFER_H
  3. template <short size>
  4. class circleBuffer{
  5.     public:
  6.     short indexPut, indexGet;           //индекс записи и индекс считывания
  7.     short bufferSpace;              //счетчик заполнености буффера
  8.     short max;                  //размер буфера
  9.     unsigned char buffer[size];         //буфер
  10.     circleBuffer(){
  11.         max = size;
  12.         for(short i = 0; i < max; i++){
  13.             buffer[i] = 0;
  14.         }
  15.         indexPut = 0;
  16.         indexGet = 0;
  17.         bufferSpace = 0;
  18.     }
  19.     inline void putNextByte(unsigned char val){ //ложим байт в буфер
  20.         TCritSect cs;               //критическая секция
  21.         bufferSpace++;
  22.         if((indexPut+1) < max){
  23.             indexPut++;
  24.         }else{
  25.             indexPut = 0;
  26.         }
  27.         buffer[indexPut] = val;
  28.     }
  29.  
  30.     inline short getFreeSpaceBuffer(){      //возвращаем свободное место в буфере
  31.         return (max - 1) - bufferSpace;
  32.     }
  33.  
  34.     inline bool getNextByte(unsigned char *val){    //считываем байт из буфер true если прочитали, false если буфер пуст
  35.         TCritSect cs;               //критическая секция
  36.         if(bufferSpace > 0){
  37.             if(indexGet+1 < max){
  38.                 indexGet++;
  39.             }else{
  40.                 indexGet = 0;
  41.             }
  42.             bufferSpace--;
  43.         }else{
  44.             return false;//буфер пуст
  45.         }
  46.         *val = buffer[indexGet];
  47.         return true;
  48.     }
  49. };
  50. #endif
  51.  
RAW Paste Data