Що таке кільцевої буфер?

Додавання та видалення даних

Додавання та видалення даних з буфера вимагає маніпуляцій з «head»- і «tail»-покажчиками. При додаванні в контейнер вставляють нове значення в поточному “head”-місці і просувають його. Коли видаляють, отримують значення поточного “tail”-покажчика і просувають «tail». Якщо потрібно просунути “tail”-покажчик, а також «head», необхідно перевірити, чи викликає вставка значення “full”. Коли буфер вже заповнений, просувають «tail» на крок попереду «head».

Після того як покажчик був просунутий, заповнюють “full”-прапор, перевіряючи рівність “head == tail”. Модульне використання оператора призведе до того, що «head» і «tail» скинуть значення “0”, коли буде досягнутий максимальний розмір. Це гарантує, що «head» і «tail» завжди будуть дійсними індексами базового контейнера даних: “static void advance_pointer (cbuf_handle_t cbuf)”. Можна створити аналогічну допоміжну функцію, яка викликається при видаленні значення з буфера.