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

📄 lzo_ptr.h

📁 lzo-1.08-src.zip 高效的压缩解压代码
💻 H
字号:
/* lzo_ptr.h -- low-level pointer constructs   This file is part of the LZO real-time data compression library.   Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer   All Rights Reserved.   The LZO library is free software; you can redistribute it and/or   modify it under the terms of the GNU General Public License as   published by the Free Software Foundation; either version 2 of   the License, or (at your option) any later version.   The LZO library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with the LZO library; see the file COPYING.   If not, write to the Free Software Foundation, Inc.,   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.   Markus F.X.J. Oberhumer   <markus@oberhumer.com> *//* WARNING: this file should *not* be used by applications. It is   part of the implementation of the library and is subject   to change. */#ifndef __LZO_PTR_H#define __LZO_PTR_H#ifdef __cplusplusextern "C" {#endif/* This is the lowest part of the LZO library. * It deals with pointer representations at bit level. *//***********************************************************************// Includes************************************************************************/#if defined(__LZO_DOS16) || defined(__LZO_WIN16)#  include <dos.h>#  if 1 && defined(__WATCOMC__)#    include <i86.h>     __LZO_EXTERN_C unsigned char _HShift;#    define __LZO_HShift	_HShift#  elif 1 && defined(_MSC_VER)     __LZO_EXTERN_C unsigned short __near _AHSHIFT;#    define __LZO_HShift	((unsigned) &_AHSHIFT)#  elif defined(__LZO_WIN16)#    define __LZO_HShift	3#  else#    define __LZO_HShift	12#  endif#  if !defined(_FP_SEG) && defined(FP_SEG)#    define _FP_SEG			FP_SEG#  endif#  if !defined(_FP_OFF) && defined(FP_OFF)#    define _FP_OFF			FP_OFF#  endif#endif/***********************************************************************// Integral types************************************************************************//* ptrdiff_t */#if !defined(lzo_ptrdiff_t)#  if (UINT_MAX >= LZO_0xffffffffL)     typedef ptrdiff_t        	lzo_ptrdiff_t;#  else     typedef long             	lzo_ptrdiff_t;#  endif#endif/* Integral types that have *exactly* the same number of bits as a lzo_voidp */#if !defined(__LZO_HAVE_PTR_T)#  if defined(lzo_ptr_t)#    define __LZO_HAVE_PTR_T#  endif#endif#if !defined(__LZO_HAVE_PTR_T)#  if defined(SIZEOF_CHAR_P) && defined(SIZEOF_UNSIGNED_LONG)#    if (SIZEOF_CHAR_P == SIZEOF_UNSIGNED_LONG)       typedef unsigned long  	lzo_ptr_t;       typedef long           	lzo_sptr_t;#      define __LZO_HAVE_PTR_T#    endif#  endif#endif#if !defined(__LZO_HAVE_PTR_T)#  if defined(SIZEOF_CHAR_P) && defined(SIZEOF_UNSIGNED)#    if (SIZEOF_CHAR_P == SIZEOF_UNSIGNED)       typedef unsigned int   	lzo_ptr_t;       typedef int            	lzo_sptr_t;#      define __LZO_HAVE_PTR_T#    endif#  endif#endif#if !defined(__LZO_HAVE_PTR_T)#  if defined(SIZEOF_CHAR_P) && defined(SIZEOF_UNSIGNED_SHORT)#    if (SIZEOF_CHAR_P == SIZEOF_UNSIGNED_SHORT)       typedef unsigned short 	lzo_ptr_t;       typedef short          	lzo_sptr_t;#      define __LZO_HAVE_PTR_T#    endif#  endif#endif#if !defined(__LZO_HAVE_PTR_T)#  if defined(LZO_HAVE_CONFIG_H) || defined(SIZEOF_CHAR_P)#    error "no suitable type for lzo_ptr_t"#  else     typedef unsigned long  	lzo_ptr_t;     typedef long           	lzo_sptr_t;#    define __LZO_HAVE_PTR_T#  endif#endif/***********************************************************************//************************************************************************//* Always use the integral version for pointer comparisions. * * Note that this only works if the representation and ordering * of the pointer and the integral is the same (at bit level). */#if defined(__LZO_DOS16) || defined(__LZO_WIN16)#define PTR(a)				((lzo_bytep) (a))/* only need the low bits of the pointer -> offset is ok */#define PTR_ALIGNED_4(a)	((_FP_OFF(a) & 3) == 0)#define PTR_ALIGNED2_4(a,b)	(((_FP_OFF(a) | _FP_OFF(b)) & 3) == 0)#else#define PTR(a)				((lzo_ptr_t) (a))#define PTR_LINEAR(a)		PTR(a)#define PTR_ALIGNED_4(a)	((PTR_LINEAR(a) & 3) == 0)#define PTR_ALIGNED_8(a)	((PTR_LINEAR(a) & 7) == 0)#define PTR_ALIGNED2_4(a,b)	(((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0)#define PTR_ALIGNED2_8(a,b)	(((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0)#endif#define PTR_LT(a,b)			(PTR(a) < PTR(b))#define PTR_GE(a,b)			(PTR(a) >= PTR(b))#define PTR_DIFF(a,b)		((lzo_ptrdiff_t) (PTR(a) - PTR(b)))#define pd(a,b)		        ((lzo_uint) ((a)-(b)))LZO_EXTERN(lzo_ptr_t)__lzo_ptr_linear(const lzo_voidp ptr);typedef union{	char			a_char;	unsigned char	a_uchar;	short			a_short;	unsigned short	a_ushort;	int				a_int;	unsigned int	a_uint;	long			a_long;	unsigned long	a_ulong;	lzo_int			a_lzo_int;	lzo_uint		a_lzo_uint;	lzo_int32		a_lzo_int32;	lzo_uint32		a_lzo_uint32;	ptrdiff_t		a_ptrdiff_t;	lzo_ptrdiff_t	a_lzo_ptrdiff_t;	lzo_ptr_t		a_lzo_ptr_t;	lzo_voidp		a_lzo_voidp;    void *          a_void_p;	lzo_bytep		a_lzo_bytep;	lzo_bytepp		a_lzo_bytepp;    lzo_uintp       a_lzo_uintp;    lzo_uint *      a_lzo_uint_p;    lzo_uint32p     a_lzo_uint32p;    lzo_uint32 *    a_lzo_uint32_p;    unsigned char * a_uchar_p;    char *          a_char_p;}lzo_full_align_t;#ifdef __cplusplus} /* extern "C" */#endif#endif /* already included *//*vi:ts=4:et*/

⌨️ 快捷键说明

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