37 lines
1.3 KiB
C
37 lines
1.3 KiB
C
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include "circular_buf.h"
|
||
|
||
|
||
void initialize_buffer(struct circular_buffer* cb) {
|
||
cb->buf_head = 0;
|
||
cb->buf_tail = 0;
|
||
}
|
||
// Проверка, является ли буфер пустым
|
||
int buffer_empty(const struct circular_buffer* cb) {
|
||
return cb->buf_head == cb->buf_tail;
|
||
}
|
||
// Проверка, является ли буфер полным
|
||
int buffer_full(const struct circular_buffer* cb) {
|
||
return (cb->buf_tail + 1) % BUFFER_SIZE == cb->buf_head;//проверяем слудеющее число, если оно будет совпадать с индексом головы то будет false, при совпадении вывыедет true
|
||
}
|
||
// Запись элемента в буфер
|
||
void write_buffer(struct circular_buffer* cb, int value) {
|
||
if (buffer_full(cb)) { // проверка на заполненность
|
||
return;
|
||
}
|
||
cb->buffer[cb->buf_tail] = value;//записывает значение value в элемент массива buffer в хвост
|
||
cb->buf_tail = (cb->buf_tail + 1) % BUFFER_SIZE;//присваивается cb->buf_tail, обновляя его значение на следующий индекс в кольцевом буфере
|
||
}
|
||
// Чтение элемента из буфера
|
||
int read_buffer(struct circular_buffer* cb) {
|
||
if (buffer_empty(cb)) { //проверяет буффер на пустоту
|
||
return -1;// -1 в качестве индикатора ошибки
|
||
}
|
||
int value = cb->buffer[cb->buf_head]; //читаем значение из массива по индексу головы
|
||
cb->buf_head = (cb->buf_head + 1) % BUFFER_SIZE; //увеличиваем индекс головы +1
|
||
return value;
|
||
}
|
||
|
||
|