APM:Libraries
ring_buff.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*
4  * Ring buffer implementation helpers
5  */
6 
7 /* Wrap up buffer index */
8 static inline unsigned ring_wrap(unsigned size, unsigned idx)
9 {
10  return idx >= size ? idx - size : idx;
11 }
12 
13 /* Returns the number of bytes available in buffer */
14 static inline unsigned ring_data_avail(unsigned size, unsigned head, unsigned tail)
15 {
16  if (head >= tail)
17  return head - tail;
18  else
19  return size + head - tail;
20 }
21 
22 /* Returns the amount of free space available in buffer */
23 static inline unsigned ring_space_avail(unsigned size, unsigned head, unsigned tail)
24 {
25  return size - ring_data_avail(size, head, tail) - 1;
26 }
27 
28 /* Returns the number of contiguous data bytes available in buffer */
29 static inline unsigned ring_data_contig(unsigned size, unsigned head, unsigned tail)
30 {
31  if (head >= tail)
32  return head - tail;
33  else
34  return size - tail;
35 }
36 
37 /* Returns the amount of contiguous space available in buffer */
38 static inline unsigned ring_space_contig(unsigned size, unsigned head, unsigned tail)
39 {
40  if (head >= tail)
41  return (tail ? size : size - 1) - head;
42  else
43  return tail - head - 1;
44 }
45 
46 /* Returns the amount of free space available after wrapping up the head */
47 static inline unsigned ring_space_wrapped(unsigned size, unsigned head, unsigned tail)
48 {
49  if (head < tail || !tail)
50  return 0;
51  else
52  return tail - 1;
53 }
54 
static unsigned ring_space_contig(unsigned size, unsigned head, unsigned tail)
Definition: ring_buff.h:38
static unsigned ring_wrap(unsigned size, unsigned idx)
Definition: ring_buff.h:8
static unsigned ring_space_wrapped(unsigned size, unsigned head, unsigned tail)
Definition: ring_buff.h:47
static unsigned ring_data_avail(unsigned size, unsigned head, unsigned tail)
Definition: ring_buff.h:14
static unsigned ring_space_avail(unsigned size, unsigned head, unsigned tail)
Definition: ring_buff.h:23
static unsigned ring_data_contig(unsigned size, unsigned head, unsigned tail)
Definition: ring_buff.h:29