1
0
Fork 0
mirror of https://github.com/albfan/miraclecast.git synced 2025-03-09 23:38:56 +00:00
miraclecast/src/shared/shl_ring.h
David Herrmann 12bf5e026e shl: add ring-buffer helpers
The shl_ring helpers manage a dynamically-growing ring-buffer. We need
that for the following RTSP stream parsers, so add them to src/shared/.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
2014-03-21 12:15:57 +01:00

52 lines
1.2 KiB
C

/*
* SHL - Ring buffer
*
* Copyright (c) 2011-2013 David Herrmann <dh.herrmann@gmail.com>
* Dedicated to the Public Domain
*/
/*
* Ring buffer
*/
#ifndef SHL_RING_H
#define SHL_RING_H
#include <errno.h>
#include <inttypes.h>
#include <stdlib.h>
#include <string.h>
#include <sys/uio.h>
struct shl_ring {
uint8_t *buf; /* buffer or NULL */
size_t size; /* actual size of @buf */
size_t start; /* start position of ring */
size_t used; /* number of actually used bytes */
};
/* flush buffer so it is empty again */
void shl_ring_flush(struct shl_ring *r);
/* flush buffer, free allocated data and reset to initial state */
void shl_ring_clear(struct shl_ring *r);
/* get pointers to buffer data and their length */
size_t shl_ring_peek(struct shl_ring *r, struct iovec *vec);
/* copy data into external linear buffer */
size_t shl_ring_copy(struct shl_ring *r, void *buf, size_t size);
/* push data to the end of the buffer */
int shl_ring_push(struct shl_ring *r, const void *u8, size_t size);
/* pull data from the front of the buffer */
void shl_ring_pull(struct shl_ring *r, size_t size);
/* return size of occupied buffer in bytes */
static inline size_t shl_ring_get_size(struct shl_ring *r)
{
return r->used;
}
#endif /* SHL_RING_H */