| /* lzo_ptr.h -- low-level pointer constructs |
| |
| This file is part of the LZO real-time data compression library. |
| |
| Copyright (C) 1996-2014 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., |
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| |
| Markus F.X.J. Oberhumer |
| <[email protected]> |
| http://www.oberhumer.com/opensource/lzo/ |
| */ |
| |
| |
| /* 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 1 |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| |
| /*********************************************************************** |
| // |
| ************************************************************************/ |
| |
| /* Always use the safe (=integral) version for pointer-comparisons. |
| * The compiler should optimize away the additional casts anyway. |
| * |
| * Note that this only works if the representation and ordering |
| * of the pointer and the integral is the same (at bit level). |
| */ |
| |
| #if (LZO_ARCH_I086) |
| #error "LZO_ARCH_I086 is unsupported" |
| #elif (LZO_MM_PVP) |
| #error "LZO_MM_PVP is unsupported" |
| #else |
| #define PTR(a) ((lzo_uintptr_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) (PTR(a) - PTR(b)) |
| #define pd(a,b) ((lzo_uint) ((a)-(b))) |
| |
| |
| LZO_EXTERN(lzo_uintptr_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_xint a_lzo_xint; |
| lzo_int16_t a_lzo_int16_t; |
| lzo_uint16_t a_lzo_uint16_t; |
| lzo_int32_t a_lzo_int32_t; |
| lzo_uint32_t a_lzo_uint32_t; |
| #if defined(lzo_uint64_t) |
| lzo_int64_t a_lzo_int64_t; |
| lzo_uint64_t a_lzo_uint64_t; |
| #endif |
| size_t a_size_t; |
| ptrdiff_t a_ptrdiff_t; |
| lzo_uintptr_t a_lzo_uintptr_t; |
| void * a_void_p; |
| char * a_char_p; |
| unsigned char * a_uchar_p; |
| const void * a_c_void_p; |
| const char * a_c_char_p; |
| const unsigned char * a_c_uchar_p; |
| lzo_voidp a_lzo_voidp; |
| lzo_bytep a_lzo_bytep; |
| const lzo_voidp a_c_lzo_voidp; |
| const lzo_bytep a_c_lzo_bytep; |
| } |
| lzo_full_align_t; |
| |
| |
| |
| #ifdef __cplusplus |
| } /* extern "C" */ |
| #endif |
| |
| #endif /* already included */ |
| |
| /* |
| vi:ts=4:et |
| */ |
| |