⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ringbuffer.h

📁 ts流的解复用
💻 H
字号:
/*
 *			ringbuffer
 *
*/
#ifndef __RINGBUFFER_H__
#define __RINGBUFFER_H__

#include <stdio.h>
#include "type.h"

struct ringbuffer_s 
{
	u8		*data;
	int		size;
	int		ptr_r;
	int		ptr_w;
	int		error;
	int		pre_r;	//前一次读
};

typedef struct ringbuffer_s RingBuffer_s;

#define RB_PKTHDRSIZE 3

/* peek at byte <offs> in the buffer */
#define RB_PEEK(rbuf,offs)	\
			(rbuf)->data[((rbuf)->ptr_r+(offs))%(rbuf)->size]

/* advance read ptr by <num> bytes */
#define RB_SKIP(rbuf,num)	\
			(rbuf)->ptr_r=((rbuf)->ptr_r+(num))%(rbuf)->size

/* write single byte to ring buffer */
#define RB_WRITE_BYTE(rbuf,byte)	\
			{ (rbuf)->data[(rbuf)->ptr_w]=(byte); \
			(rbuf)->ptr_w=((rbuf)->ptr_w+1)%(rbuf)->size; }
			
#ifdef __cplusplus
extern "C" {
#endif
						
void rb_init(struct ringbuffer_s *rbuf, void *data, int len);
void rb_fill_init(struct ringbuffer_s *rbuf, void *data, int len);

int rb_empty(struct ringbuffer_s *rbuf);
int	rb_free(struct ringbuffer_s *rbuf);
int rb_avail(struct ringbuffer_s *rbuf);
void rb_flush(struct ringbuffer_s *rbuf);
int rb_read(struct ringbuffer_s *rbuf, u8 *buf, int len);
int rb_write(struct ringbuffer_s *rbuf, const u8 *buf, int len);
int rb_fill(struct ringbuffer_s *rbuf, FILE *fp, int len);
void rb_backspace(struct ringbuffer_s *s, int offset);

int rb_pkt_write(struct ringbuffer_s *rbuf, u8* buf, int len);
int rb_pkt_read(struct ringbuffer_s *rbuf, int idx,
				int offset, u8* buf, int len);
void rb_pkt_dispose(struct ringbuffer_s *rbuf, int idx);
int rb_pkt_next(struct ringbuffer_s *rbuf, int idx, int* pktlen);

#ifdef __cplusplus
}
#endif


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -