views:

139

answers:

3

I see a lot of templates and complicated data structures for implementing a circular buffer.

How do I code a simple integer circular buffer for 5 numbers?

I'm thinking in C is the most straightforward?

Thanks.

+3  A: 

Have an array, buffer, of 5 integers. Have an index ind to the next element. When you add, do

buffer[ind] = value;
ind = (ind + 1) % 5;
Matthew Flaschen
From the personal experience file, you need to be careful that ind is not negative. If you change the second line to "ind = (max(0,ind) % 1) + 5;", you don't have to worry about negative values for ind.
photo_tom
+1  A: 

If the size and data type of your buffer are fixed, a simple array is all you need:

 int buffer[5];

Add to that a couple pointers:

 int* start = &buffer[0];
 int* end   = &buffer[4]+1;
 int* input = start;
 int* output = start;
James Curran
+5  A: 

Take an array, arr, an index idx, and a counter, num.

To insert foo, say arr[idx++] = foo; idx %= buffer_len; num++;.

To read out an item into foo, say foo = arr[(idx-num)%buffer_len]; num--;.

Add boundary checks.

Borealid
+1 for the modulus operator.
Thomas Matthews