Pogosim
Loading...
Searching...
No Matches
FifoBuffer.h
Go to the documentation of this file.
1
10
11#ifndef __FifoBuffer_H__
12#define __FifoBuffer_H__
13
14#define FifoBuffer_typedef(T, NAME) \
15 typedef struct { \
16 int size; \
17 int start; \
18 int end; \
19 int write_count;\
20 int read_count;\
21 T* elems; \
22 } NAME
23
24#define FifoBuffer_init(BUF, S, T, BUFMEM) \
25 BUF->size = S; \
26 BUF->start = 0; \
27 BUF->end = 0; \
28 BUF->read_count=0;\
29 BUF->write_count=0;\
30 BUF->elems = (T*)BUFMEM
31
32#define FifoBuffer_write(BUF, ELEM)\
33 BUF->elems[BUF->end]=ELEM;\
34 BUF->write_count++;\
35 BUF->end=(BUF->end+1)%BUF->size;
36
37#define FifoBuffer_read(BUF, ELEM)\
38 ELEM=BUF->elems[BUF->start];\
39 BUF->read_count++;\
40 BUF->start=(BUF->start+1)%BUF->size;
41
42#define FifoBuffer_peek(BUF,ELEM,INDEX)\
43 ELEM=BUF->elems[BUF->start+INDEX];
44
45#define FifoBuffer_flush(BUF)\
46 BUF->start = 0; \
47 BUF->end = 0; \
48 BUF->read_count=0;\
49 BUF->write_count=0;
50
51#define FifoBuffer_count(BUF) (BUF->write_count-BUF->read_count)
52#define FifoBuffer_is_full(BUF) (FifoBuffer_count(BUF)==BUF->size)
53#define FifoBuffer_is_empty(BUF) (FifoBuffer_count(BUF)==0)
54#define FifoBuffer_overflow(BUF) (FifoBuffer_count(BUF)>=BUF->size)
55
56#endif