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

📄 sfifo.h

📁 mpeg 2 source code for video compression
💻 H
字号:
/*	SFIFO 1.3 Simple portable lock-free FIFO	(c) 2000-2002, David Olofson - free software under the terms of the LGPL 2.1*//* * Platform support: *	gcc / Linux / x86:		Works *	gcc / Linux / x86 kernel:	Works *	gcc / FreeBSD / x86:		Works *	gcc / NetBSD / x86:		Works *	gcc / Mac OS X / PPC:		Works *	gcc / Win32 / x86:		Works *	Borland C++ / DOS / x86RM:	Works *	Borland C++ / Win32 / x86PM16:	Untested *	? / Various Un*ces / ?:		Untested *	? / Mac OS / PPC:		Untested *	gcc / BeOS / x86:		Untested *	gcc / BeOS / PPC:		Untested *	? / ? / Alpha:			Untested * * 1.2: Max buffer size halved, to avoid problems with *	the sign bit... * * 1.3:	Critical buffer allocation bug fixed! For certain *	requested buffer sizes, older version would *	allocate a buffer of insufficient size, which *	would result in memory thrashing. (Amazing that *	I've manage to use this to the extent I have *	without running into this... *heh*) */#ifndef	_SFIFO_H_#define	_SFIFO_H_#ifdef __cplusplusextern "C" {#endif#include <errno.h>/*------------------------------------------------	"Private" stuff------------------------------------------------*//* * Porting note: *	Reads and writes of a variable of this type in memory *	must be *atomic*! 'int' is *not* atomic on all platforms. *	A safe type should be used, and  sfifo should limit the *	maximum buffer size accordingly. */typedef int sfifo_atomic_t;#ifdef __TURBOC__#	define	SFIFO_MAX_BUFFER_SIZE	0x7fff#else /* Kludge: Assume 32 bit platform */#	define	SFIFO_MAX_BUFFER_SIZE	0x7fffffff#endiftypedef struct sfifo_t{	char *buffer;	int size;			/* Number of bytes */	sfifo_atomic_t readpos;		/* Read position */	sfifo_atomic_t writepos;	/* Write position */} sfifo_t;#define SFIFO_SIZEMASK(x)	((x)->size - 1)/*------------------------------------------------	API------------------------------------------------*/int sfifo_init(sfifo_t *f, int size);void sfifo_close(sfifo_t *f);void sfifo_flush(sfifo_t *f);int sfifo_write(sfifo_t *f, const void *buf, int len);int sfifo_read(sfifo_t *f, void *buf, int len);#define sfifo_used(x)	(((x)->writepos - (x)->readpos) & SFIFO_SIZEMASK(x))#define sfifo_space(x)	((x)->size - 1 - sfifo_used(x))#define sfifo_size(x)	((x)->size - 1)#ifdef __cplusplus};#endif#endif

⌨️ 快捷键说明

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