vdr-plugin-softhddevice-drm-gles 1.6.4-d0291bb
ringbuffer.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-or-later
2
13#ifndef __SOFTHDRINGBUFFER_H
14#define __SOFTHDRINGBUFFER_H
15
16#include <cstddef>
17
26typedef volatile int atomic_t;
27
28#define atomic_set(ptr, val) __atomic_store_n(ptr, val, __ATOMIC_SEQ_CST)
29#define atomic_read(ptr) __atomic_load_n(ptr, __ATOMIC_SEQ_CST)
30#define atomic_inc(ptr) __atomic_add_fetch(ptr, 1, __ATOMIC_SEQ_CST)
31#define atomic_dec(ptr) __atomic_sub_fetch(ptr, 1, __ATOMIC_SEQ_CST)
32#define atomic_add(val, ptr) __atomic_add_fetch(ptr, val, __ATOMIC_SEQ_CST)
33#define atomic_sub(val, ptr) __atomic_sub_fetch(ptr, val, __ATOMIC_SEQ_CST)
34
43public:
44 cSoftHdRingbuffer(size_t);
46 void Reset(void);
47 size_t Write(const void *, size_t);
48 size_t GetWritePointer(void **);
49 size_t WriteAdvance(size_t);
50 size_t Read(void *, size_t);
51 size_t GetReadPointer(const void **);
52 size_t ReadAdvance(size_t);
53 size_t FreeBytes(void);
54 size_t UsedBytes(void);
55
56private:
57 char *m_pBuffer;
58 const char *m_pBufferEnd;
59 size_t m_size;
60 const char *m_pReadPointer;
62
63 // The only thing modified by both
65};
66
67#endif
Ringbuffer (FIFO) Implementation.
Definition ringbuffer.h:42
size_t GetWritePointer(void **)
Get write pointer and free bytes at this position of ring buffer.
size_t m_size
bytes in buffer (for faster calc)
Definition ringbuffer.h:59
~cSoftHdRingbuffer(void)
cSoftHdRingbuffer destructor
char * m_pWritePointer
only used by writer
Definition ringbuffer.h:61
size_t Read(void *, size_t)
Read from a ring buffer.
size_t UsedBytes(void)
Get used bytes in ring buffer.
size_t WriteAdvance(size_t)
Advance write pointer in ring buffer.
size_t FreeBytes(void)
Get free bytes in ring buffer.
atomic_t m_filled
how many of the buffer is used
Definition ringbuffer.h:64
size_t ReadAdvance(size_t)
Advance read pointer in ring buffer.
const char * m_pReadPointer
only used by reader
Definition ringbuffer.h:60
size_t GetReadPointer(const void **)
Get read pointer and used bytes at this position of ring buffer.
const char * m_pBufferEnd
end of buffer
Definition ringbuffer.h:58
size_t Write(const void *, size_t)
Write to a ring buffer.
char * m_pBuffer
ring buffer data
Definition ringbuffer.h:57
void Reset(void)
Reset ring buffer pointers.
volatile int atomic_t
Atomic Wrapper Macros.
Definition ringbuffer.h:26