From c6914fda458a20b311c32ce2f90357f257d7752b Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 15 Dec 2015 14:10:37 -0800 Subject: [PATCH] libobs/util: Add circlebuf_push_front function --- libobs/util/circlebuf.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/libobs/util/circlebuf.h b/libobs/util/circlebuf.h index 2bc349ea..67843027 100644 --- a/libobs/util/circlebuf.h +++ b/libobs/util/circlebuf.h @@ -168,6 +168,27 @@ static inline void circlebuf_push_back(struct circlebuf *cb, const void *data, cb->end_pos = new_end_pos; } +static inline void circlebuf_push_front(struct circlebuf *cb, const void *data, + size_t size) +{ + cb->size += size; + circlebuf_ensure_capacity(cb); + + if (cb->start_pos < size) { + size_t back_size = size - cb->start_pos; + + if (cb->start_pos) + memcpy(cb->data, (uint8_t*)data + back_size, + cb->start_pos); + + cb->start_pos = cb->capacity - back_size; + memcpy((uint8_t*)cb->data + cb->start_pos, data, back_size); + } else { + cb->start_pos -= size; + memcpy((uint8_t*)cb->data + cb->start_pos, data, size); + } +} + static inline void circlebuf_peek_front(struct circlebuf *cb, void *data, size_t size) { -- GitLab