📄 buffer.c
字号:
/*
buffer.c - Simple implementation of a circular buffer.
*/
#include "buffer.h"
// ibuNextIndex() - Internal buffer function. Returns the next value
// for the head/tail values.
unsigned char ibuNextIndex(unsigned char nCurrentValue)
{ nCurrentValue++;
if(nCurrentValue == CIRCULAR_BUFFER_SIZE) nCurrentValue = 0;
return nCurrentValue;
}
// buInitBuffer() - Initialises a provided circular buffer
void buInitBuffer(pbsCircBuffer pBuffer)
{ pBuffer->nHeadIndex = 0;
pBuffer->nTailIndex = 0;
}
// buWriteByte() - Write a byte to the buffer, if possible.
// Returns:
// 0 - success
// else - failed (buffer is full)
unsigned char buWriteByte(pbsCircBuffer pBuffer, unsigned char nData)
{ unsigned char nHeadIndex, nNewIndex;
nHeadIndex = pBuffer->nHeadIndex;
nNewIndex = ibuNextIndex(nHeadIndex);
if(nNewIndex == pBuffer->nTailIndex) return 1;
pBuffer->nBuffer[nHeadIndex] = nData;
pBuffer->nHeadIndex = nNewIndex;
return 0;
}
// buReadByte() - Reads a byte from the buffer if possible.
// Returns:
// The byte from the buffer
// NOTE:
// * If a previous call to buGetBytesUsed() returns 0, then this function
// will return 0, which may not be distinguishable from actual data in the
// buffer.
unsigned char buReadByte(pbsCircBuffer pBuffer)
{ unsigned char nTailIndex, nReadByte;
nTailIndex = pBuffer->nTailIndex;
if(nTailIndex == pBuffer->nHeadIndex) return 0;
nReadByte = pBuffer->nBuffer[nTailIndex];
nTailIndex = ibuNextIndex(nTailIndex);
pBuffer->nTailIndex = nTailIndex;
return nReadByte;
}
// buIsBufferEmpty() - Indicates whether or not the buffer is empty.
// pBuffer - The buffer to look at
// Returns:
// zero - Not empty
// non-zero - Empty buffer
unsigned char buIsBufferEmpty(pbsCircBuffer pBuffer)
{ return ((pBuffer->nHeadIndex == pBuffer->nTailIndex) ? 1 : 0);
}
// buIsBufferFull() - Indicates whether or not the buffer is full
// pBuffer - The buffer in question
// Returns:
// zero - Buffer is not full
// non-zero - Buffer is full
unsigned char buIsBufferFull(pbsCircBuffer pBuffer)
{ unsigned char nNewHead;
nNewHead = ibuNextIndex(pBuffer->nHeadIndex);
return ((nNewHead == pBuffer->nTailIndex) ? 1 : 0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -