最简单的循环缓冲区

说明:循环缓冲区
  • loopbuf.h
#ifndef _LOOPBUF_H_
#define _LOOPBUF_H_

#define u32 unsigned int
#define u8 unsigned char
#define u16 unsigned short

typedef struct LoopBuf_t
{
	u32		flag;
	u32		head;
	u32		tail;
	u16  	len;
	u8		buf[30];

} LoopBuf;



#define GET_LOOPBUF_WLEN(LOOPBUF,MAXLEN)	((((LOOPBUF)->head)+(u16)(MAXLEN)-(((LOOPBUF)->tail)+1))%(u16)(MAXLEN))
#define GET_LOOPBUF_RLEN(LOOPBUF,MAXLEN)	(((u16)(MAXLEN)-1)- (GET_LOOPBUF_WLEN(LOOPBUF,MAXLEN)))

#define LOOPBUF_READ(LOOPBUF,MAXLEN,data,size) \
do { \
	int i;\
	for (i=0;i<size;i++) \
	{\
		data[i]=((LOOPBUF)->buf)[((LOOPBUF)->head)];\
		((LOOPBUF)->head)=(++((LOOPBUF)->head))%(u16)(MAXLEN);\
	}\
}while(0)

#define LOOPBUF_WRITE_BYTE(LOOPBUF,MAXLEN,chr)\
	do {\
			((LOOPBUF)->buf)[((LOOPBUF)->tail)]=(chr);\
			((LOOPBUF)->tail)=(++((LOOPBUF)->tail))%(u16)(MAXLEN);\
}while(0)

#define LOOPBUF_WRITE(LOOPBUF,MAXLEN,data,size)\
	do {\
		int i;\
		for (i=0;i<size;i++)\
		{\
			LOOPBUF_WRITE_BYTE(LOOPBUF,MAXLEN,((data)[i]));\
		}\
}while(0)




#endif

猜你喜欢

转载自my.oschina.net/u/2345008/blog/1556156