2024-02-14 17:24:32 +01:00

66 lines
1.2 KiB
C

#include "buffer.h"
// implementation for a FIFO-buffer with ints
// this very simple FIFO-buffer can only hold one int
#define FIFO_SIZE 8
// 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;
}