Classe+CircularBuffer

Home > Robótica > Bibliotecas **Recursos** > RunTimer > Timer2 > **CircularBuffer** > SerialLog > ActionPlan **Dispositivos** > Ultrassom > Array de sensores > NRF24L01 > Wireless log > RF24Control **Movimento** > StepperMotor > StepperMotorTm > DoubleStepper > DoubleStepperTm

Esta é uma classe com pouco código que implementa um //buffer// circular. É possível adicionar items e depois recuperá-los na sequência em que foram armazenados. Estes items podem ser estruturas, strings, arrays ou qualquer tipo de dados. Abaixo sua declaração pública:

code format="javascript" class CircularBuffer{ public: CircularBuffer; boolean init(byte items, byte itemSize); boolean addItem(byte* item); byte* getFirst(byte* item); void clear; byte itemsCount; };

code O uso é bem simples, depois de criar uma instância, inicialize na função //setup// chamando o método **//init//** para informar a quantidade máxima de itens que serão armazenados e o tamanho de cada item. Use o método **//getFirst//** para recuperar o primeiro item do //buffer//. Este método faz com que "a fila ande". Da próxima ver que for chamado é o próximo item que vai ser retornado. O método **//clear//** limpa o //buffer//. Use o método **//itemsCount//** para saber quantos itens restam na fila.

Esta classe é usada para armazenar uma lista de movimentos em classes relacionadas ao movimento. Um exemplo de como pode ser derivada para conter qualquer tipo de estrutura está no arquivo mvBuffer.h. Abaixo o código da classe que implementa o buffer de movimentos:

code format="javascript"
 * 1) include 

typedef struct { char mvType; float param; } TMoveParam;

// Quantidade máxima de itens no buffer
 * 1) define BufLen 10

class MoveBuffer: public CircularBuffer{ public: MoveBuffer:CircularBuffer{};

boolean init {   return CircularBuffer::init(BufLen, sizeof(TMoveParam)); }

boolean addMove(TMoveParam* mpar) {   return CircularBuffer::addItem((byte*)mpar); }

TMoveParam* getFirst(TMoveParam* mpar) {   return (TMoveParam*)CircularBuffer::getFirst((byte*)mpar); } };

code