#include "buffer.h" // implementation for a FIFO-buffer with ints // this very simple FIFO-buffer can only hold one int #define FIFO_SIZE 100 // shared variables within this file static int FIFO[FIFO_SIZE]; static unsigned int FIFO_count = 0; // read and write pointers unsigned int FIFO_write_p = 0; unsigned int FIFO_read_p = 0; /** incrementPointer * * add one and rotates if it overflows the buffersize */ unsigned int incrementPointer(unsigned int p) { p++; if (p == FIFO_SIZE) { p = 0; } return p; } bool buffer_put(int i) { bool notFull = !buffer_is_full(); if (notFull) { FIFO[FIFO_write_p] = i; FIFO_count++; FIFO_write_p = incrementPointer(FIFO_write_p); } return notFull; } bool buffer_get(int *p) { bool notEmpty = !buffer_is_empty(); if (notEmpty) { *p = FIFO[FIFO_read_p]; FIFO_count--; FIFO_read_p = incrementPointer(FIFO_read_p); } return notEmpty; } bool buffer_is_full(void) { return (FIFO_count >= FIFO_SIZE); } bool buffer_is_empty(void) { return (FIFO_count <= 0); } unsigned int number_of_elements_in_buffer() { return FIFO_count; }