#ifndef __INC_Buffer_cc__
#define __INC_Buffer_cc__

#include "Buffer.h"

template<class T, int size>
Buffer<T, size>::Buffer() {
	in = out = number = 0;
}

template<class T, int size>
void Buffer<T, size>::enqueue(T x) {
	if (nonFull()) {
		bc[in] = x; // Wert im Feld speichern
		in = (in + 1) % size; // in-Zeiger weitersetzen 
		number++; // Ein Element mehr
	}
}

template<class T, int size>
void Buffer<T, size>::dequeue(T &x) {
	if (nonEmpty()) {
		x = bc[out]; // Wert aus dem Feld holen
		out = (out + 1) % size; // out-Zeiger weitersetzen 
		number--; // ein Element weniger
	}
}

template<class T, int size>
bool Buffer<T, size>::nonEmpty() {
	return (number > 0);
}

template<class T, int size>
bool Buffer<T, size>::nonFull() {
	return (number < size);
}

#endif