#include <stdio.h>
#include <stdlib.h>

#define BUFFER_SIZE 10

typedef struct {
	int buffer[BUFFER_SIZE];
	int BufHead;
	int BufTail;
} CircularBuffer;

void initializeBuffer(CircularBuffer* cb) {
	cb->BufHead = 0;
	cb->BufTail = 0;
}
// Проверка, является ли буфер пустым
int BufferEmpty(const CircularBuffer* cb) {
	return cb->BufHead == cb->BufTail;
}
// Проверка, является ли буфер полным
int BufferFull(const CircularBuffer* cb) {
	return (cb->BufTail + 1) % BUFFER_SIZE == cb->BufHead;//проверяем слудеющее число, если оно будет совпадать с индексом головы то будет false, при совпадении вывыедет true
}
// Запись элемента в буфер
void writeBuffer(CircularBuffer* cb, int value) {
	if (BufferFull(cb)) { //  проверка на заполненность 
		return;
	}
	cb->buffer[cb->BufTail] = value;//записывает значение value в элемент массива buffer в хвост
	cb->BufTail = (cb->BufTail + 1) % BUFFER_SIZE;//присваивается cb->BufTail, обновляя его значение на следующий индекс в кольцевом буфере
}
// Чтение элемента из буфера
int readBuffer(CircularBuffer* cb) {
	if (BufferEmpty(cb)) { //проверяет буффер на пустоту
		return -1;// -1  в качестве индикатора ошибки
	}
	int value = cb->buffer[cb->BufHead]; //читаем значение из массива по индексу головы
	cb->BufHead = (cb->BufHead + 1) % BUFFER_SIZE; //увеличиваем индекс головы +1
	return value;
}