programar - programacion en c++
¿Cómo puedo codificar un búfer circular entero simple en C/C++? (4)
Si el tamaño y el tipo de datos de su búfer son fijos, todo lo que necesita es una simple matriz:
int buffer[5];
Añade a eso un par de punteros:
int* start = &buffer[0];
int* end = &buffer[4]+1;
int* input = start;
int* output = start;
Veo muchas plantillas y estructuras de datos complicadas para implementar un búfer circular.
¿Cómo puedo codificar un búfer circular entero simple para 5 números?
Estoy pensando que en C es lo más sencillo?
Gracias.
Toma una matriz, arr
, un índice idx
, y un contador, num
.
Para insertar foo
, diga arr[idx++] = foo; idx %= buffer_len; num++;
arr[idx++] = foo; idx %= buffer_len; num++;
.
Para leer un elemento en foo
, diga foo = arr[(idx-num)%buffer_len]; num--;
foo = arr[(idx-num)%buffer_len]; num--;
.
Añadir controles de límites.
Tener una matriz, buffer
, de 5 enteros. Tener un índice ind
para el siguiente elemento. Cuando agregues, haz
buffer[ind] = value;
ind = (ind + 1) % 5;
int rI =0;
int wI=0;
#define FIFO_SIZE 3
int checkAvail()
{
int avail=0;
if(wI<rI)
avail= (rI-wI);
else
avail = (FIFO_SIZE-wI+rI);
return avail;
}
int addFIFO(int *a, int val)
{
if(checkAvail()>0)
{
a[wI]=val;
wI++;
if(wI>FIFO_SIZE)
wI=0;
}
else
{
printf("FIFO full");
}
return 0;
}
int remFIFO(int *a)
{
int val;
if((FIFO_SIZE-checkAvail()>0))
{
val =a[rI];
rI++;
if(rI>FIFO_SIZE)
rI=0;
}
else
{
printf("FIFO empty");
}
return 0;
}
int main(array<System::String ^> ^args)
{
int FIFO_ARRAY[FIFO_SIZE]={};
addFIFO(FIFO_ARRAY,1);
addFIFO(FIFO_ARRAY,2);
addFIFO(FIFO_ARRAY,3);
addFIFO(FIFO_ARRAY,4);
remFIFO(FIFO_ARRAY);
remFIFO(FIFO_ARRAY);
remFIFO(FIFO_ARRAY);
remFIFO(FIFO_ARRAY);
remFIFO(FIFO_ARRAY);
}