A very simple implementation, expressed in C. Implements a simple circular buffer in C as a FIFO queue. Note that this allows queues of any size.
#ifndef CIRCULARBUFFER_H_
#define CIRCULARBUFFER_H_
typedef struct
{
int * data;
int * first;
int * next;
int max;
}
cbuffer_t;
cbuffer_t * cBufferInit(int max);
int cBufferPush(cbuffer_t *c, int data);
int cBufferPop(cbuffer_t *c, int *data);
#endif /* CIRCULARBUFFER_H_ */#include "CircularBuffer.h"
cbuffer_t * cBufferInit(int max)
{
cbuffer_t * buffer = (cbuffer_t*)malloc(sizeof(cbuffer_t));
buffer->data = (int*)malloc(max * sizeof(int));
buffer->first = (int*)0;
buffer->next = buffer->data;
buffer->max = max;
return buffer;
}
int cBufferPush(cbuffer_t *buffer, int data)
{
int x = (int)(buffer->next - buffer->first);
if (buffer->first == buffer->next || buffer->next - buffer->first == buffer->max)
return -1;
*buffer->next = data;
buffer->first = buffer->first == (int*)0 ? buffer->next : buffer->first;
buffer->next = buffer->next + 1 == buffer->data + buffer->max ? buffer->data : buffer->next + 1;
return 0;
}
int cBufferPop(cbuffer_t *buffer, int *data)
{
if (buffer->first == (int*)0)
return -1;
*data = *buffer->first;
buffer->first = buffer->first + 1 == buffer->data + buffer->max ? buffer->data : buffer->first + 1;
buffer->first = buffer->first == buffer->next ? (int*)0 : buffer->first;
return 0;
}






