mirror of
				https://gitcode.com/gh_mirrors/re/react-native-pushy.git
				synced 2025-11-04 07:13:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			220 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/*
 | 
						|
---------------------------------------------------------------------------
 | 
						|
Copyright (c) 1998-2010, Brian Gladman, Worcester, UK. All rights reserved.
 | 
						|
 | 
						|
The redistribution and use of this software (with or without changes)
 | 
						|
is allowed without the payment of fees or royalties provided that:
 | 
						|
 | 
						|
  source code distributions include the above copyright notice, this
 | 
						|
  list of conditions and the following disclaimer;
 | 
						|
 | 
						|
  binary distributions include the above copyright notice, this list
 | 
						|
  of conditions and the following disclaimer in their documentation.
 | 
						|
 | 
						|
This software is provided 'as is' with no explicit or implied warranties
 | 
						|
in respect of its operation, including, but not limited to, correctness
 | 
						|
and fitness for purpose.
 | 
						|
---------------------------------------------------------------------------
 | 
						|
Issue Date: 20/12/2007
 | 
						|
 | 
						|
 The unsigned integer types defined here are of the form uint_<nn>t where
 | 
						|
 <nn> is the length of the type; for example, the unsigned 32-bit type is
 | 
						|
 'uint_32t'.  These are NOT the same as the 'C99 integer types' that are
 | 
						|
 defined in the inttypes.h and stdint.h headers since attempts to use these
 | 
						|
 types have shown that support for them is still highly variable.  However,
 | 
						|
 since the latter are of the form uint<nn>_t, a regular expression search
 | 
						|
 and replace (in VC++ search on 'uint_{:z}t' and replace with 'uint\1_t')
 | 
						|
 can be used to convert the types used here to the C99 standard types.
 | 
						|
*/
 | 
						|
 | 
						|
#ifndef _BRG_TYPES_H
 | 
						|
#define _BRG_TYPES_H
 | 
						|
 | 
						|
#if defined(__cplusplus)
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#include <limits.h>
 | 
						|
 | 
						|
#if defined( _MSC_VER ) && ( _MSC_VER >= 1300 )
 | 
						|
#  include <stddef.h>
 | 
						|
#  define ptrint_t intptr_t
 | 
						|
#elif defined( __ECOS__ )
 | 
						|
#  define intptr_t unsigned int
 | 
						|
#  define ptrint_t intptr_t
 | 
						|
#elif defined( __GNUC__ ) && ( __GNUC__ >= 3 )
 | 
						|
#  include <stdint.h>
 | 
						|
#  define ptrint_t intptr_t
 | 
						|
#else
 | 
						|
#  define ptrint_t int
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef BRG_UI8
 | 
						|
#  define BRG_UI8
 | 
						|
#  if UCHAR_MAX == 255u
 | 
						|
     typedef unsigned char uint_8t;
 | 
						|
#  else
 | 
						|
#    error Please define uint_8t as an 8-bit unsigned integer type in brg_types.h
 | 
						|
#  endif
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef BRG_UI16
 | 
						|
#  define BRG_UI16
 | 
						|
#  if USHRT_MAX == 65535u
 | 
						|
     typedef unsigned short uint_16t;
 | 
						|
#  else
 | 
						|
#    error Please define uint_16t as a 16-bit unsigned short type in brg_types.h
 | 
						|
#  endif
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef BRG_UI32
 | 
						|
#  define BRG_UI32
 | 
						|
#  if UINT_MAX == 4294967295u
 | 
						|
#    define li_32(h) 0x##h##u
 | 
						|
     typedef unsigned int uint_32t;
 | 
						|
#  elif ULONG_MAX == 4294967295u
 | 
						|
#    define li_32(h) 0x##h##ul
 | 
						|
     typedef unsigned long uint_32t;
 | 
						|
#  elif defined( _CRAY )
 | 
						|
#    error This code needs 32-bit data types, which Cray machines do not provide
 | 
						|
#  else
 | 
						|
#    error Please define uint_32t as a 32-bit unsigned integer type in brg_types.h
 | 
						|
#  endif
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef BRG_UI64
 | 
						|
#  if defined( __BORLANDC__ ) && !defined( __MSDOS__ )
 | 
						|
#    define BRG_UI64
 | 
						|
#    define li_64(h) 0x##h##ui64
 | 
						|
     typedef unsigned __int64 uint_64t;
 | 
						|
#  elif defined( _MSC_VER ) && ( _MSC_VER < 1300 )    /* 1300 == VC++ 7.0 */
 | 
						|
#    define BRG_UI64
 | 
						|
#    define li_64(h) 0x##h##ui64
 | 
						|
     typedef unsigned __int64 uint_64t;
 | 
						|
#  elif defined( __sun ) && defined( ULONG_MAX ) && ULONG_MAX == 0xfffffffful
 | 
						|
#    define BRG_UI64
 | 
						|
#    define li_64(h) 0x##h##ull
 | 
						|
     typedef unsigned long long uint_64t;
 | 
						|
#  elif defined( __MVS__ )
 | 
						|
#    define BRG_UI64
 | 
						|
#    define li_64(h) 0x##h##ull
 | 
						|
     typedef unsigned int long long uint_64t;
 | 
						|
#  elif defined( UINT_MAX ) && UINT_MAX > 4294967295u
 | 
						|
#    if UINT_MAX == 18446744073709551615u
 | 
						|
#      define BRG_UI64
 | 
						|
#      define li_64(h) 0x##h##u
 | 
						|
       typedef unsigned int uint_64t;
 | 
						|
#    endif
 | 
						|
#  elif defined( ULONG_MAX ) && ULONG_MAX > 4294967295u
 | 
						|
#    if ULONG_MAX == 18446744073709551615ul
 | 
						|
#      define BRG_UI64
 | 
						|
#      define li_64(h) 0x##h##ul
 | 
						|
       typedef unsigned long uint_64t;
 | 
						|
#    endif
 | 
						|
#  elif defined( ULLONG_MAX ) && ULLONG_MAX > 4294967295u
 | 
						|
#    if ULLONG_MAX == 18446744073709551615ull
 | 
						|
#      define BRG_UI64
 | 
						|
#      define li_64(h) 0x##h##ull
 | 
						|
       typedef unsigned long long uint_64t;
 | 
						|
#    endif
 | 
						|
#  elif defined( ULONG_LONG_MAX ) && ULONG_LONG_MAX > 4294967295u
 | 
						|
#    if ULONG_LONG_MAX == 18446744073709551615ull
 | 
						|
#      define BRG_UI64
 | 
						|
#      define li_64(h) 0x##h##ull
 | 
						|
       typedef unsigned long long uint_64t;
 | 
						|
#    endif
 | 
						|
#  endif
 | 
						|
#endif
 | 
						|
 | 
						|
#if !defined( BRG_UI64 )
 | 
						|
#  if defined( NEED_UINT_64T )
 | 
						|
#    error Please define uint_64t as an unsigned 64 bit type in brg_types.h
 | 
						|
#  endif
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef RETURN_VALUES
 | 
						|
#  define RETURN_VALUES
 | 
						|
#  if defined( DLL_EXPORT )
 | 
						|
#    if defined( _MSC_VER ) || defined ( __INTEL_COMPILER )
 | 
						|
#      define VOID_RETURN    __declspec( dllexport ) void __stdcall
 | 
						|
#      define INT_RETURN     __declspec( dllexport ) int  __stdcall
 | 
						|
#    elif defined( __GNUC__ )
 | 
						|
#      define VOID_RETURN    __declspec( __dllexport__ ) void
 | 
						|
#      define INT_RETURN     __declspec( __dllexport__ ) int
 | 
						|
#    else
 | 
						|
#      error Use of the DLL is only available on the Microsoft, Intel and GCC compilers
 | 
						|
#    endif
 | 
						|
#  elif defined( DLL_IMPORT )
 | 
						|
#    if defined( _MSC_VER ) || defined ( __INTEL_COMPILER )
 | 
						|
#      define VOID_RETURN    __declspec( dllimport ) void __stdcall
 | 
						|
#      define INT_RETURN     __declspec( dllimport ) int  __stdcall
 | 
						|
#    elif defined( __GNUC__ )
 | 
						|
#      define VOID_RETURN    __declspec( __dllimport__ ) void
 | 
						|
#      define INT_RETURN     __declspec( __dllimport__ ) int
 | 
						|
#    else
 | 
						|
#      error Use of the DLL is only available on the Microsoft, Intel and GCC compilers
 | 
						|
#    endif
 | 
						|
#  elif defined( __WATCOMC__ )
 | 
						|
#    define VOID_RETURN  void __cdecl
 | 
						|
#    define INT_RETURN   int  __cdecl
 | 
						|
#  else
 | 
						|
#    define VOID_RETURN  void
 | 
						|
#    define INT_RETURN   int
 | 
						|
#  endif
 | 
						|
#endif
 | 
						|
 | 
						|
/*	These defines are used to detect and set the memory alignment of pointers.
 | 
						|
    Note that offsets are in bytes.
 | 
						|
 | 
						|
    ALIGN_OFFSET(x,n)			return the positive or zero offset of 
 | 
						|
                                the memory addressed by the pointer 'x' 
 | 
						|
                                from an address that is aligned on an 
 | 
						|
                                'n' byte boundary ('n' is a power of 2)
 | 
						|
 | 
						|
    ALIGN_FLOOR(x,n)			return a pointer that points to memory
 | 
						|
                                that is aligned on an 'n' byte boundary 
 | 
						|
                                and is not higher than the memory address
 | 
						|
                                pointed to by 'x' ('n' is a power of 2)
 | 
						|
 | 
						|
    ALIGN_CEIL(x,n)				return a pointer that points to memory
 | 
						|
                                that is aligned on an 'n' byte boundary 
 | 
						|
                                and is not lower than the memory address
 | 
						|
                                pointed to by 'x' ('n' is a power of 2)
 | 
						|
*/
 | 
						|
 | 
						|
#define ALIGN_OFFSET(x,n)	(((ptrint_t)(x)) & ((n) - 1))
 | 
						|
#define ALIGN_FLOOR(x,n)	((uint_8t*)(x) - ( ((ptrint_t)(x)) & ((n) - 1)))
 | 
						|
#define ALIGN_CEIL(x,n)		((uint_8t*)(x) + (-((ptrint_t)(x)) & ((n) - 1)))
 | 
						|
 | 
						|
/*  These defines are used to declare buffers in a way that allows
 | 
						|
    faster operations on longer variables to be used.  In all these
 | 
						|
    defines 'size' must be a power of 2 and >= 8. NOTE that the 
 | 
						|
    buffer size is in bytes but the type length is in bits
 | 
						|
 | 
						|
    UNIT_TYPEDEF(x,size)        declares a variable 'x' of length 
 | 
						|
                                'size' bits
 | 
						|
 | 
						|
    BUFR_TYPEDEF(x,size,bsize)  declares a buffer 'x' of length 'bsize' 
 | 
						|
                                bytes defined as an array of variables
 | 
						|
                                each of 'size' bits (bsize must be a 
 | 
						|
                                multiple of size / 8)
 | 
						|
 | 
						|
    UNIT_CAST(x,size)           casts a variable to a type of 
 | 
						|
                                length 'size' bits
 | 
						|
 | 
						|
    UPTR_CAST(x,size)           casts a pointer to a pointer to a 
 | 
						|
                                varaiable of length 'size' bits
 | 
						|
*/
 | 
						|
 | 
						|
#define UI_TYPE(size)               uint_##size##t
 | 
						|
#define UNIT_TYPEDEF(x,size)        typedef UI_TYPE(size) x
 | 
						|
#define BUFR_TYPEDEF(x,size,bsize)  typedef UI_TYPE(size) x[bsize / (size >> 3)]
 | 
						|
#define UNIT_CAST(x,size)           ((UI_TYPE(size) )(x))  
 | 
						|
#define UPTR_CAST(x,size)           ((UI_TYPE(size)*)(x))
 | 
						|
 | 
						|
#if defined(__cplusplus)
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 |