Ho un buffer circolare di dimensioni fisse (implementato come array): al momento dell'inizializzazione, il buffer viene riempito con il numero massimo specificato di elementi che consente l'uso di un indice di posizione singola per tenere traccia della nostra posizione attuale nel cerchio.Come avvolgere in modo efficiente l'indice di un buffer circolare a dimensione fissa
Che cos'è un modo efficace per accedere a un elemento nel buffer circolare? Ecco la mia soluzione attuale:
int GetElement(int index)
{
if (index >= buffer_size || index < 0)
{
// some code to handle the case
}
else
{
// wrap the index
index = end_index + index >= buffer_size ? (index + end_index) - buffer_size : end_index + index;
}
return buffer[index];
}
Alcune definizioni:
end_index
è l'indice dell'elemento immediatamente dopo l'ultimo elemento nel cerchio (che sarebbe anche essere considerato uguale al START_INDEX, o il primo elemento di il cerchio).
buffer_size
è la dimensione massima del buffer.
Quando non è END_INDEX pari a buffer_size? –
@Fred, quando si aggiunge un elemento al buffer circolare ... l'indice si avvolge ogni volta che si supera il buffer_size. – Kiril
@Lirik: mi manca qualcosa. –