diff options
Diffstat (limited to '')
-rw-r--r-- | mqtt_websockets/c-rbuf/src/ringbuffer_internal.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/mqtt_websockets/c-rbuf/src/ringbuffer_internal.h b/mqtt_websockets/c-rbuf/src/ringbuffer_internal.h new file mode 100644 index 000000000..f7bdf815c --- /dev/null +++ b/mqtt_websockets/c-rbuf/src/ringbuffer_internal.h @@ -0,0 +1,43 @@ +/* + * + * Copyright: SPDX-License-Identifier: LGPL-3.0-only + * + * Author: Timotej Šiškovič <timotejs@gmail.com> + * + */ + +#ifndef RINGBUFFER_INTERNAL_H +#define RINGBUFFER_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 |