diff --git a/Circular buffer/сircular_buf.c b/Circular buffer/сircular_buf.c new file mode 100644 index 0000000..3f09963 --- /dev/null +++ b/Circular buffer/сircular_buf.c @@ -0,0 +1,42 @@ +#include +#include + +#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; +} + +