ring_buffer.h

Go to the documentation of this file.
00001 
00038 #ifndef _RING_BUFFER_H
00039 #define _RING_BUFFER_H
00040 
00053 #define RING_BUFFER_NEW(struct_name, size, type, ...)   \
00054         struct struct_name {    \
00055                 type queue[size];       \
00056                 uint8_t start;                  \
00057                 uint8_t end;                    \
00058                 uint8_t buffer_size;                    \
00059         } __VA_ARGS__
00060 
00061 
00068 #define RING_BUFFER_INIT(buf, size)                     \
00069         do {                                                                            \
00070                 (buf).buffer_size = size;                               \
00071         } while(0)
00072 
00073 
00078 #define RING_BUFFER_CLEAR(buf)  \
00079         do {                                            \
00080                 (buf).start = 0;                \
00081                 (buf).end = 0;                  \
00082         } while (0)
00083 
00088 #define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
00089 
00090 
00095 #define RING_BUFFER_FULL(buf)   \
00096                 (((buf).end + 1) % (buf).buffer_size == (buf).start)
00097 
00098 
00106 #define RING_BUFFER_ADD(buf, val)               \
00107         do {                                                            \
00108                 (buf).queue[(buf).end] = val;   \
00109                 (buf).end = ((buf).end + 1) % (buf).buffer_size;        \
00110         } while (0)
00111 
00112 
00122 #define RING_BUFFER_REMOVE(buf, val_ret)        \
00123         do {    \
00124                 (val_ret) = (buf).queue[(buf).start];   \
00125                 (buf).start = ((buf).start + 1) % (buf).buffer_size;    \
00126         } while (0)
00127 
00136  #define RING_BUFFER_PEEK(buf, val_ret)  \
00137   do { \
00138     (val_ret) = (buf).queue[(buf).start]; \
00139   } while(0)
00140 
00141 #endif /* _RING_BUFFER_H */
00142 

Generated on Wed Nov 5 19:59:42 2008 for libdragonfly by  doxygen 1.5.3