Skip to content
Snippets Groups Projects
buffer.c 1.66 KiB
Newer Older
#include <buffer.h>
#include <types.h>

int BufferReady(Buffer* Buf){
  int ready = ((Buf!=NULL) &&(Buf->Size >0))? 1:0;
  return ready;
}


int FeedBuffer(Buffer* Buf,void* Word)
{
  if(BufferReady(Buf)){
    if(Buf->Length == Buf->Size) return BUFF_FULL;
    (Buf->Storage)[Buf->Tail] = *Word;
    Buf->Tail = (Buf->Tail + 1) % (Buf->Size);
    Buf->Length = Buf->Length + 1;
    return 0;
  }else return BUFF_NOTREADY;
}

int BufferFIFO(Buffer* Buf,void* Dest)
{
  if(BufferReady(Buf)){
    if(Buf->Length == 0) return BUFF_EMPTY;
    *Word = (Buf->Storage)[Buf->Head];
    return 0;
  }else return BUFF_NOTREADY;
}
int BufferPopHead(Buffer* Buf)
{
  if(BufferReady(Buf)){
    if(Buf->Length == 0) return BUFF_EMPTY;
    Buf->Head = (Buf->Head +1) % Buf->Size;
    Buf->Length = (Buf->Length) - 1;
    return 0;
  }else return BUFF_NOTREADY;
}

int BufferFILO(Buffer* Buf, void* Dest)
{
  if(Buf->Size == 0) return  BUFF_NOTREADY;
  if(Buf->Length == 0) return BUFF_EMPTY;
  *Word = (Buf->Storage)[Buf->Tail];
  return 0;
}

int BufferPopLast(Buffer* Buf)
{
  if(BufferReady(Buf)){
    if(Buf->Length == 0) return BUFF_EMPTY;
    Buf->Tail = (Buf->Tail - 1 + Buf->Size) % Buf->Size;
    Buf->Length = (Buf->Length) - 1;
    return 0;
  }else return BUFF_NOTREADY;
}

int ClearBuffer(Buffer* Buf)
{
  if(BufferReady(Buf)){
    Buf->Length = 0;
    Buf->Tail = Buf->Head;
    return 0;
  }else return BUFF_NOTREADY;
}

int BufferShrinkFIFO(Buffer* Buf, int Num)
{
  if(BufferReady(Buf)){
    int ActualShrink = (Num > Buf->Length)? (Buf->Length): Num;
    Buf->Length = Buf->Length - ActualShrink;
    Buf->Head = (Buf->Head + ActualShrink) % Buf->Size;
    return 0;
  }else return BUFF_NOTREADY;