Circular (gb.data)

Um buffer circular, ou Circular for short, é um buffer de tamanho fixo com uma ponteiro de leitura e escrita. Quando os dados são lidos ou escritos, o ponteiro adequado é movido para a frente independentemente do outro. Quando o fim do buffer é atingido, o ponteiro volta ao inicio. Assim, os valores antigos de leitura nunca podem ser substituídos.

Este tipo de dados pode ser ideal para a comunicação entre as entidades onde realmente não importa quando valores antigos são reescritos, mas, mantém um buffer de tamanho fixo. Por exemplo, as mensagens de log são tradicionalmente tratados com essa técnica.

Mais informações sobre buffers circulares em Wikipedia

Esta classe é criável.

Propriedades
IsEmpty   Retorna TRUE se o Circular está vazio, ou seja, o ponteiro de leitura é o ponteiro de escrita.
IsFull   Retorna TRUE se o Circular está cheio, ou seja, o ponteiro de escrita se aproximou do ponteiro de leitura. Dependendo das configurações Overwrite, o buffer pode ainda ser escrito até mesmo se estiver cheio.
Overwrite   Retorno ou define se novos dados irão substituir os dados mais antigo não lidos em um Circular cheio.
Reader   Retorna ou define o índice do ponteiro de leitura.
Size   Retorna ou define o tamanho do buffer.
Writer   Retorna ou define o ponteiro de escrita.

Métodos
Clear   Remove todos os elementos do Circular avançando o ponteiro de leitura para o ponteiro de escrita.
Peek   Ler um valor sem mover o ponteiro de leitura para frente.
Read   Ler um valor, ou seja, devolver o elemento no ponteiro de leitura e faz avançar o ponteiro. Se o ponteiro de leitura atinge o ponteiro de escrita (o Circular torna-se vazio), NULL é retornado.
Reset   Define a leitura e escrever ponteiros para índice 0. O Circular então, está "vazio". Além disso, "cheio" ao mesmo tempo se o seu tamanho é 0:-)
Resize   Redimensiona o buffer.
Write   Escreve um elemento para o Circular e avançar o ponteiro de escrita.