ring_buffer.h

00001 
00011 #ifndef _RING_BUFFER_H
00012 #define _RING_BUFFER_H
00013 
00026 #define RING_BUFFER_NEW(struct_name, size, type, ...)   \
00027         struct struct_name {    \
00028                 type queue[size];       \
00029                 uint8_t start;                  \
00030                 uint8_t end;                    \
00031                 uint8_t buffer_size;                    \
00032         } __VA_ARGS__
00033 
00034 
00041 #define RING_BUFFER_INIT(buf, size)                     \
00042         do {                                                                            \
00043                 (buf).buffer_size = size;                               \
00044         } while(0)
00045 
00046 
00051 #define RING_BUFFER_CLEAR(buf)  \
00052         do {                                            \
00053                 (buf).start = 0;                \
00054                 (buf).end = 0;                  \
00055         } while (0)
00056 
00061 #define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
00062 
00063 
00068 #define RING_BUFFER_FULL(buf)   \
00069                 (((buf).end + 1) % (buf).buffer_size == (buf).start)
00070 
00071 
00079 #define RING_BUFFER_ADD(buf, val)               \
00080         do {                                                            \
00081                 (buf).queue[(buf).end] = val;   \
00082                 (buf).end = ((buf).end + 1) % (buf).buffer_size;        \
00083         } while (0)
00084 
00085 
00095 #define RING_BUFFER_REMOVE(buf, val_ret)        \
00096         do {    \
00097                 (val_ret) = (buf).queue[(buf).start];   \
00098                 (buf).start = ((buf).start + 1) % (buf).buffer_size;    \
00099         } while (0)
00100 
00109  #define RING_BUFFER_PEEK(buf, val_ret)  \
00110   do { \
00111     (val_ret) = (buf).queue[(buf).start]; \
00112   } while(0)
00113 
00114 #endif /* _RING_BUFFER_H */
00115 

Generated on Wed Sep 26 17:39:30 2007 for libdragonfly by  doxygen 1.4.6