12345678910111213141516171819202122232425262728293031323334353637 |
- // Copyright: SPDX-License-Identifier: GPL-3.0-only
- #ifndef CRINGBUFFER_INTERNAL_H
- #define CRINGBUFFER_INTERNAL_H
- struct rbuf_t {
- char *data;
- // points to next byte where we can write
- char *head;
- // points to oldest (next to be poped) readable byte
- char *tail;
- // to avoid calculating data + size
- // all the time
- char *end;
- size_t size;
- size_t size_data;
- };
- /* this exists so that it can be tested by unit tests
- * without optimization that resets head and tail to
- * beginning if buffer empty
- */
- inline static int rbuf_bump_tail_noopt(rbuf_t buffer, size_t bytes)
- {
- if (bytes > buffer->size_data)
- return 0;
- int i = buffer->tail - buffer->data;
- buffer->tail = &buffer->data[(i + bytes) % buffer->size];
- buffer->size_data -= bytes;
- return 1;
- }
- #endif
|