/*
 * fifo.c
 *
 *	Created on: 25.10.2015
 *		Author: bernd
 */

#include "../util/fifo.h"

void fifo_init(fifo_t * self, uint8_t* buffer, size_t size) {
	self->buffer = buffer;
	self->get = 0;
	self->put = 0;
	self->size = size;
}

bool fifo_put(fifo_t * self, uint8_t data) {
	size_t put = self->put;
	size_t nextput = put + 1;
	if (nextput == self->size) {
		nextput = 0;
	}
	if (nextput == self->get) {
		return false;
	} else {
		self->buffer[put] = data;
		self->put = nextput;
		return true;
	}
}

bool fifo_get(fifo_t * self, uint8_t* data) {
	size_t get = self->get;
	if (get == self->put) {
		return false;
	} else {
		*data = self->buffer[get++];
		if (get == self->size) {
			get = 0;
		}
		self->get = get;
		return true;
	}
}

bool fifo_is_empty(fifo_t * self) {
	return (self->get == self->put);
}