#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; }