[Stub] support.
Simple circular buffer.
This implementation is not thread-safe. In particular, none of these functions is guaranteed re-entrant.
Functions
void rb_init(ring_buffer * rb, uint16 size, uint8 * buf)Initialise a ring buffer.
Parameters:
- rb -
Instance to initialise
- size -
Number of items in buf. The ring buffer will always leave one element unoccupied, so the maximum number of elements it can store will be size - 1. Thus, size must be at least 2.
- buf -
Buffer to store items into
uint16 rb_full_count(ring_buffer * rb)Return the number of elements stored in the ring buffer.
Parameters:
- rb -
Buffer whose elements to count.
int rb_is_full(ring_buffer * rb)Returns true if and only if the ring buffer is full.
Parameters:
- rb -
Buffer to test.
int rb_is_empty(ring_buffer * rb)Returns true if and only if the ring buffer is empty.
Parameters:
- rb -
Buffer to test.
void rb_insert(ring_buffer * rb, uint8 element)Append element onto the end of a ring buffer.
Parameters:
- rb -
Buffer to append onto.
- element -
Value to append.
uint8 rb_remove(ring_buffer * rb)Remove and return the first item from a ring buffer.
Parameters:
- rb -
Buffer to remove from, must contain at least one element.
int16 rb_safe_remove(ring_buffer * rb)Attempt to remove the first item from a ring buffer.
If the ring buffer is nonempty, removes and returns its first item. If it is empty, does nothing and returns a negative value.
Parameters:
- rb -
Buffer to attempt to remove from.
int rb_safe_insert(ring_buffer * rb, uint8 element)Attempt to insert an element into a ring buffer.
Parameters:
- rb -
Buffer to insert into.
- element -
Value to insert into rb.
Side Effects:: If rb is not full, appends element onto buffer.
Return: If element was appended, then true; otherwise, false.
int rb_push_insert(ring_buffer * rb, uint8 element)Append an item onto the end of a non-full ring buffer.
If the buffer is full, removes its first item, then inserts the new element at the end.
Parameters:
- rb -
Ring buffer to insert into.
- element -
Value to insert into ring buffer.
Return: On success, returns -1. If an element was popped, returns the popped value.
void rb_reset(ring_buffer * rb)Discard all items from a ring buffer.
Parameters:
- rb -
Ring buffer to discard all items from.
class ring_buffer
Ring buffer type.
The buffer is empty when head == tail.
The buffer is full when the head is one byte in front of the tail, modulo buffer length.
One byte is left free to distinguish empty from full.
Public Members
- uint8 * buf
Buffer items are stored into.
- uint16 head
Index of the next item to remove.
- uint16 tail
Index where the next item will get inserted.
- uint16 size
Buffer capacity minus one.