66 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			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 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;
 | 
						|
}
 |