Revise circle buffer types

This commit is contained in:
Jeffrey Pfau 2014-07-20 23:56:12 -07:00
parent eabac4c413
commit 10fc916425
2 changed files with 16 additions and 11 deletions

View File

@ -2,13 +2,13 @@
#ifndef NDEBUG #ifndef NDEBUG
static int _checkIntegrity(struct CircleBuffer* buffer) { static int _checkIntegrity(struct CircleBuffer* buffer) {
if ((int8_t*) buffer->writePtr - (int8_t*) buffer->readPtr == buffer->size) { if ((int8_t*) buffer->writePtr - (int8_t*) buffer->readPtr == (ssize_t) buffer->size) {
return 1; return 1;
} }
if (buffer->capacity - buffer->size == ((int8_t*) buffer->writePtr - (int8_t*) buffer->readPtr)) { if ((ssize_t) (buffer->capacity - buffer->size) == ((int8_t*) buffer->writePtr - (int8_t*) buffer->readPtr)) {
return 1; return 1;
} }
if (buffer->capacity - buffer->size == ((int8_t*) buffer->readPtr - (int8_t*) buffer->writePtr)) { if ((ssize_t) (buffer->capacity - buffer->size) == ((int8_t*) buffer->readPtr - (int8_t*) buffer->writePtr)) {
return 1; return 1;
} }
return 0; return 0;
@ -26,10 +26,14 @@ void CircleBufferDeinit(struct CircleBuffer* buffer) {
buffer->data = 0; buffer->data = 0;
} }
unsigned CircleBufferSize(const struct CircleBuffer* buffer) { size_t CircleBufferSize(const struct CircleBuffer* buffer) {
return buffer->size; return buffer->size;
} }
size_t CircleBufferCapacity(const struct CircleBuffer* buffer) {
return buffer->capacity;
}
void CircleBufferClear(struct CircleBuffer* buffer) { void CircleBufferClear(struct CircleBuffer* buffer) {
buffer->size = 0; buffer->size = 0;
buffer->readPtr = buffer->data; buffer->readPtr = buffer->data;
@ -140,7 +144,7 @@ int CircleBufferRead32(struct CircleBuffer* buffer, int32_t* value) {
return 4; return 4;
} }
int CircleBufferRead(struct CircleBuffer* buffer, void* output, size_t length) { size_t CircleBufferRead(struct CircleBuffer* buffer, void* output, size_t length) {
int8_t* data = buffer->readPtr; int8_t* data = buffer->readPtr;
if (buffer->size == 0) { if (buffer->size == 0) {
return 0; return 0;
@ -171,7 +175,7 @@ int CircleBufferRead(struct CircleBuffer* buffer, void* output, size_t length) {
return length; return length;
} }
int CircleBufferDump(const struct CircleBuffer* buffer, void* output, size_t length) { size_t CircleBufferDump(const struct CircleBuffer* buffer, void* output, size_t length) {
int8_t* data = buffer->readPtr; int8_t* data = buffer->readPtr;
if (buffer->size == 0) { if (buffer->size == 0) {
return 0; return 0;

View File

@ -5,21 +5,22 @@
struct CircleBuffer { struct CircleBuffer {
void* data; void* data;
unsigned capacity; size_t capacity;
unsigned size; size_t size;
void* readPtr; void* readPtr;
void* writePtr; void* writePtr;
}; };
void CircleBufferInit(struct CircleBuffer* buffer, unsigned capacity); void CircleBufferInit(struct CircleBuffer* buffer, unsigned capacity);
void CircleBufferDeinit(struct CircleBuffer* buffer); void CircleBufferDeinit(struct CircleBuffer* buffer);
unsigned CircleBufferSize(const struct CircleBuffer* buffer); size_t CircleBufferSize(const struct CircleBuffer* buffer);
size_t CircleBufferCapacity(const struct CircleBuffer* buffer);
void CircleBufferClear(struct CircleBuffer* buffer); void CircleBufferClear(struct CircleBuffer* buffer);
int CircleBufferWrite8(struct CircleBuffer* buffer, int8_t value); int CircleBufferWrite8(struct CircleBuffer* buffer, int8_t value);
int CircleBufferWrite32(struct CircleBuffer* buffer, int32_t value); int CircleBufferWrite32(struct CircleBuffer* buffer, int32_t value);
int CircleBufferRead8(struct CircleBuffer* buffer, int8_t* value); int CircleBufferRead8(struct CircleBuffer* buffer, int8_t* value);
int CircleBufferRead32(struct CircleBuffer* buffer, int32_t* value); int CircleBufferRead32(struct CircleBuffer* buffer, int32_t* value);
int CircleBufferRead(struct CircleBuffer* buffer, void* output, size_t length); size_t CircleBufferRead(struct CircleBuffer* buffer, void* output, size_t length);
int CircleBufferDump(const struct CircleBuffer* buffer, void* output, size_t length); size_t CircleBufferDump(const struct CircleBuffer* buffer, void* output, size_t length);
#endif #endif