Improved Readability, more comments.
This commit is contained in:
@ -10,87 +10,64 @@ typedef struct {
|
||||
uint32_t * writer;
|
||||
uint32_t * start;
|
||||
uint32_t * end;
|
||||
uint8_t write_failed;
|
||||
uint8_t read_failed;
|
||||
} ringbuffer_t;
|
||||
|
||||
/* Use Array as RingBuffer */
|
||||
static inline void RingBuffer_InitFromArray(ringbuffer_t * const rb, uint32_t * const array, const uint32_t size)
|
||||
static inline void RingBuffer_InitFromArray(ringbuffer_t * const ring_buffer, uint32_t * const array, uint32_t size)
|
||||
{
|
||||
rb->start = rb->reader = rb->writer = array;
|
||||
rb->end = array + size - 1;
|
||||
rb->write_failed = rb->read_failed = 0;
|
||||
ring_buffer->start = ring_buffer->reader = ring_buffer->writer = &array[0];
|
||||
ring_buffer->end = &array[0] + size - 1;
|
||||
}
|
||||
|
||||
static inline uint32_t * RingBuffer_GetNextWriterAddress(const ringbuffer_t * const rb)
|
||||
static inline uint32_t * RingBuffer_NextAddress(ringbuffer_t * const ring_buffer, uint32_t * const pointer)
|
||||
{
|
||||
uint32_t * next_address = rb->writer;
|
||||
|
||||
if (next_address == rb->end)
|
||||
next_address = rb->start;
|
||||
if (pointer == ring_buffer->end)
|
||||
return ring_buffer->start;
|
||||
else
|
||||
next_address++;
|
||||
|
||||
return next_address;
|
||||
return pointer + 1;
|
||||
}
|
||||
|
||||
static inline uint8_t RingBuffer_IsFull(const ringbuffer_t * const rb)
|
||||
static inline uint8_t RingBuffer_IsFull(ringbuffer_t * const ring_buffer)
|
||||
{
|
||||
if (RingBuffer_GetNextWriterAddress(rb) == rb->reader)
|
||||
if (RingBuffer_NextAddress(ring_buffer, ring_buffer->writer) == ring_buffer->reader)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline uint8_t RingBuffer_IsEmpty(const ringbuffer_t * const rb)
|
||||
static inline uint8_t RingBuffer_IsEmpty(ringbuffer_t * const ring_buffer)
|
||||
{
|
||||
if (rb->writer == rb->reader)
|
||||
if (ring_buffer->writer == ring_buffer->reader)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline uint8_t RingBuffer_IsFilled(const ringbuffer_t * const rb)
|
||||
static inline uint8_t RingBuffer_IsFilled(ringbuffer_t * const ring_buffer)
|
||||
{
|
||||
return !RingBuffer_IsEmpty(rb);
|
||||
return !RingBuffer_IsEmpty(ring_buffer);
|
||||
}
|
||||
|
||||
/* Write elem into RingBuffer. */
|
||||
static inline void RingBuffer_Write(ringbuffer_t * const rb, const uint32_t elem)
|
||||
/* Write element into RingBuffer. */
|
||||
static inline void RingBuffer_Write(ringbuffer_t * const ring_buffer, uint32_t element)
|
||||
{
|
||||
if (!RingBuffer_IsFull(rb))
|
||||
if (!RingBuffer_IsFull(ring_buffer))
|
||||
{
|
||||
*(rb->writer) = elem;
|
||||
|
||||
if (rb->writer == rb->end)
|
||||
rb->writer = rb->start;
|
||||
else
|
||||
rb->writer++;
|
||||
}
|
||||
else
|
||||
{
|
||||
rb->write_failed = 1;
|
||||
*(ring_buffer->writer) = element;
|
||||
ring_buffer->writer = RingBuffer_NextAddress(ring_buffer, ring_buffer->writer);
|
||||
}
|
||||
}
|
||||
|
||||
/* Read value from RingBuffer and returns it. */
|
||||
static inline uint32_t RingBuffer_Read(ringbuffer_t * const rb)
|
||||
/* Read value from RingBuffer. */
|
||||
static inline uint32_t RingBuffer_Read(ringbuffer_t * const ring_buffer)
|
||||
{
|
||||
uint32_t ret = 0;
|
||||
uint32_t element = 0;
|
||||
|
||||
if (!RingBuffer_IsEmpty(rb))
|
||||
if (!RingBuffer_IsEmpty(ring_buffer))
|
||||
{
|
||||
ret = *(rb->reader);
|
||||
|
||||
if (rb->reader == rb->end)
|
||||
rb->reader = rb->start;
|
||||
else
|
||||
rb->reader++;
|
||||
}
|
||||
else
|
||||
{
|
||||
rb->read_failed = 1;
|
||||
element = *(ring_buffer->reader);
|
||||
ring_buffer->reader = RingBuffer_NextAddress(ring_buffer, ring_buffer->reader);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return element;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user