Open FFBoard
Open source force feedback firmware
ringbufferwrapper.cpp
Go to the documentation of this file.
1#include "ringbufferwrapper.h"
2
3#include <algorithm>
4
5#ifndef NULL
6#define NULL 0;
7#endif
8
9RingBufferWrapper::RingBufferWrapper(uint8_t* data, uint32_t len) noexcept
10 : valid(false)
11{
12 if (!isMultipleTwo(len)) {
13 valid = false;
14 goto error;
15 }
16
17 valid = ringBufferInit(&buffer, data, len);
18 if (!valid) {
19 goto error;
20 }
21 return;
22
23error:
24 delete[] data;
25 buffer.data = NULL;
26}
27
28
30 : valid(false)
31{
32 if (!isMultipleTwo(size)) {
33 return;
34 }
35
36 uint8_t *data = new uint8_t[size];
37 valid = ringBufferInit(&buffer, data, size);
38
39 if (!valid) {
40 delete[] data;
41 buffer.data = NULL;
42 }
43}
44
46{
47 if (buffer.data != NULL) {
48 delete[] buffer.data;
49 }
50}
51
53{
54 return valid;
55}
56
58{
59 return ringBufferEmpty(&buffer);
60}
61
63{
64 return ringBufferLen(&buffer);
65}
66
68{
70}
71
73{
75}
76
77size_t RingBufferWrapper::appendOne(uint8_t data) noexcept
78{
79 return appendMultiple(&data, 1);
80}
81
82size_t RingBufferWrapper::appendMultiple(const uint8_t *data, size_t len) noexcept
83{
84 len = std::min(len, freeSpace());
86 return len;
87}
88
89size_t RingBufferWrapper::peekOne(uint8_t* data) noexcept
90{
91 return peekMultiple(data, 1);
92}
93
94size_t RingBufferWrapper::getOne(uint8_t* data) noexcept
95{
96 return getMultiple(data, 1);
97}
98
99size_t RingBufferWrapper::getMultiple(uint8_t *dst, size_t len) noexcept
100{
101 len = std::min(len, length());
102 if (len == 0) {
103 return 0;
104 }
105 ringBufferGetMultiple(&buffer, dst, len);
106 return len;
107}
108
109size_t RingBufferWrapper::peekMultiple(uint8_t *dst, size_t len) noexcept
110{
111 len = std::min(len, length());
112 if (len == 0) {
113 return 0;
114 }
115 ringBufferPeekMultiple(&buffer, dst, len);
116 return len;
117}
118
119size_t RingBufferWrapper::discardMultiple(size_t len) noexcept
120{
121 len = std::min(len, length());
122 if (len == 0) {
123 return 0;
124 }
126 return len;
127}
128
130{
132}
virtual ~RingBufferWrapper() noexcept
size_t appendOne(uint8_t data) noexcept
size_t length() noexcept
size_t freeSpace() noexcept
void clean() noexcept
size_t peekOne(uint8_t *data) noexcept
bool empty() noexcept
size_t discardMultiple(size_t len) noexcept
size_t capacity() noexcept
size_t peekMultiple(uint8_t *dst, size_t len) noexcept
RingBufferWrapper(uint8_t *data, uint32_t len) noexcept
size_t getMultiple(uint8_t *dst, size_t len) noexcept
bool isValid() noexcept
size_t getOne(uint8_t *data) noexcept
size_t appendMultiple(const uint8_t *data, size_t len) noexcept
static struct @612 data
uint8_t const * buffer
Definition: midi_device.h:100
size_t ringBufferFreeSpace(const RingBuffer *buffer)
Definition: ringbuffer.c:64
size_t ringBufferLen(const RingBuffer *buffer)
Definition: ringbuffer.c:52
void ringBufferGetMultiple(RingBuffer *buffer, uint8_t *dst, size_t len)
Definition: ringbuffer.c:100
int ringBufferInit(RingBuffer *buffer, uint8_t *data, size_t len)
Definition: ringbuffer.c:40
size_t ringBufferMaxSize(const RingBuffer *buffer)
Definition: ringbuffer.c:68
void ringBufferAppendMultiple(RingBuffer *buffer, const uint8_t *data, size_t len)
Definition: ringbuffer.c:77
void ringBufferClear(RingBuffer *buffer)
Definition: ringbuffer.c:121
uint8_t ringBufferEmpty(const RingBuffer *buffer)
Definition: ringbuffer.c:60
void ringBufferDiscardMultiple(RingBuffer *buffer, size_t len)
Definition: ringbuffer.c:117
void ringBufferPeekMultiple(const RingBuffer *buffer, uint8_t *dst, size_t len)
Definition: ringbuffer.c:105
static int isMultipleTwo(size_t len)
Definition: ringbuffer.h:61
uint8_t * data
Definition: ringbuffer.h:19