defs.h
来自「A*算法 A*算法 A*算法 A*算法A*算法A*算法」· C头文件 代码 · 共 1,861 行 · 第 1/5 页
H
1,861 行
ILP32 and Win64 uses LLP64 (a.k.a. P64)
Under Unix LP64 is the most widely used (the only I've ever seen, in fact)
*/
/* 32bit */
#ifdef __PALMOS__
typedef int wxInt32;
typedef unsigned int wxUint32;
#define SIZEOF_INT 4
#define SIZEOF_LONG 4
#define SIZEOF_WCHAR_T 2
#define SIZEOF_SIZE_T 4
#define wxSIZE_T_IS_UINT
#define SIZEOF_VOID_P 4
#define SIZEOF_SIZE_T 4
#elif defined(__WINDOWS__)
/* Win64 uses LLP64 model and so ints and longs have the same size as in */
/* Win32 */
#if defined(__WIN32__)
typedef int wxInt32;
typedef unsigned int wxUint32;
/* Assume that if SIZEOF_INT is defined that all the other ones except
SIZEOF_SIZE_T, are too. See next #if below. */
#ifndef SIZEOF_INT
#define SIZEOF_INT 4
#define SIZEOF_LONG 4
#define SIZEOF_WCHAR_T 2
/*
under Win64 sizeof(size_t) == 8 and so it is neither unsigned
int nor unsigned long!
*/
#ifdef __WIN64__
#define SIZEOF_SIZE_T 8
#undef wxSIZE_T_IS_UINT
#else /* Win32 */
#define SIZEOF_SIZE_T 4
#define wxSIZE_T_IS_UINT
#endif
#undef wxSIZE_T_IS_ULONG
#ifdef __WIN64__
#define SIZEOF_VOID_P 8
#else /* Win32 */
#define SIZEOF_VOID_P 4
#endif /* Win64/32 */
#endif /* !defined(SIZEOF_INT) */
/*
If Python.h was included first, it defines all of the SIZEOF's above
except for SIZEOF_SIZE_T, so we need to do it here to avoid
triggering the #error in the ssize_t typedefs below...
*/
#ifndef SIZEOF_SIZE_T
#ifdef __WIN64__
#define SIZEOF_SIZE_T 8
#else /* Win32 */
#define SIZEOF_SIZE_T 4
#endif
#endif
#else
#error "Unsupported Windows version"
#endif
#else /* !Windows */
/* SIZEOF_XXX are normally defined by configure */
#ifdef SIZEOF_INT
#if SIZEOF_INT == 8
/* must be ILP64 data model, there is normally a special 32 bit */
/* type in it but we don't know what it is... */
#error "No 32bit int type on this platform"
#elif SIZEOF_INT == 4
typedef int wxInt32;
typedef unsigned int wxUint32;
#elif SIZEOF_INT == 2
/* must be LP32 */
#if SIZEOF_LONG != 4
#error "No 32bit int type on this platform"
#endif
typedef long wxInt32;
typedef unsigned long wxUint32;
#else
/* wxWidgets is not ready for 128bit systems yet... */
#error "Unknown sizeof(int) value, what are you compiling for?"
#endif
#else /* !defined(SIZEOF_INT) */
/* assume default 32bit machine -- what else can we do? */
wxCOMPILE_TIME_ASSERT( sizeof(int) == 4, IntMustBeExactly4Bytes);
wxCOMPILE_TIME_ASSERT( sizeof(size_t) == 4, SizeTMustBeExactly4Bytes);
wxCOMPILE_TIME_ASSERT( sizeof(void *) == 4, PtrMustBeExactly4Bytes);
#define SIZEOF_INT 4
#define SIZEOF_SIZE_T 4
#define SIZEOF_VOID_P 4
typedef int wxInt32;
typedef unsigned int wxUint32;
#if defined(__MACH__) && !defined(SIZEOF_WCHAR_T)
#define SIZEOF_WCHAR_T 4
#endif
#if wxUSE_WCHAR_T && !defined(SIZEOF_WCHAR_T)
/* also assume that sizeof(wchar_t) == 2 (under Unix the most */
/* common case is 4 but there configure would have defined */
/* SIZEOF_WCHAR_T for us) */
/* the most common case */
wxCOMPILE_TIME_ASSERT( sizeof(wchar_t) == 2,
Wchar_tMustBeExactly2Bytes);
#define SIZEOF_WCHAR_T 2
#endif /* wxUSE_WCHAR_T */
#endif
#endif /* Win/!Win */
typedef wxUint32 wxDword;
/*
Define an integral type big enough to contain all of long, size_t and void *.
*/
#if SIZEOF_LONG >= SIZEOF_VOID_P && SIZEOF_LONG >= SIZEOF_SIZE_T
/* normal case */
typedef unsigned long wxUIntPtr;
#elif SIZEOF_SIZE_T >= SIZEOF_VOID_P
/* Win64 case */
typedef size_t wxUIntPtr;
#else
/*
This should never happen for the current architectures but if you're
using one where it does, please contact wx-dev@lists.wxwidgets.org.
*/
#error "Pointers can't be stored inside integer types."
#endif
#ifdef __cplusplus
/* And also define a couple of simple functions to cast pointer to/from it. */
inline wxUIntPtr wxPtrToUInt(const void *p)
{
/*
VC++ 7.1 gives warnings about casts such as below even when they're
explicit with /Wp64 option, suppress them as we really know what we're
doing here
*/
#ifdef __VISUALC__
#pragma warning(disable: 4311) /* pointer truncation from '' to '' */
#endif
return wx_reinterpret_cast(wxUIntPtr, p);
#ifdef __VISUALC__
#pragma warning(default: 4311)
#endif
}
inline void *wxUIntToPtr(wxUIntPtr p)
{
#ifdef __VISUALC__
#pragma warning(disable: 4312) /* conversion to type of greater size */
#endif
return wx_reinterpret_cast(void *, p);
#ifdef __VISUALC__
#pragma warning(default: 4312)
#endif
}
#endif /*__cplusplus*/
/* 64 bit */
/* NB: we #define and not typedef wxLongLong_t because we use "#ifdef */
/* wxLongLong_t" in wx/longlong.h */
/* wxULongLong_t is set later (usually to unsigned wxLongLong_t) */
/* to avoid compilation problems on 64bit machines with ambiguous method calls */
/* we will need to define this */
#undef wxLongLongIsLong
/* first check for generic cases which are long on 64bit machine and "long */
/* long", then check for specific compilers */
#if defined(SIZEOF_LONG) && (SIZEOF_LONG == 8)
#define wxLongLong_t long
#define wxLongLongSuffix l
#define wxLongLongFmtSpec _T("l")
#define wxLongLongIsLong
#elif defined(__WXPALMOS__)
#define wxLongLong_t int64_t
#define wxLongLongSuffix ll
#define wxLongLongFmtSpec _T("ll")
#elif (defined(__VISUALC__) && defined(__WIN32__))
#define wxLongLong_t __int64
#define wxLongLongSuffix i64
#define wxLongLongFmtSpec _T("I64")
#elif defined(__BORLANDC__) && defined(__WIN32__) && (__BORLANDC__ >= 0x520)
#define wxLongLong_t __int64
#define wxLongLongSuffix i64
#define wxLongLongFmtSpec _T("L")
#elif (defined(__WATCOMC__) && (defined(__WIN32__) || defined(__DOS__) || defined(__OS2__)))
#define wxLongLong_t __int64
#define wxLongLongSuffix i64
#define wxLongLongFmtSpec _T("L")
#elif defined(__DIGITALMARS__)
#define wxLongLong_t __int64
#define wxLongLongSuffix LL
#define wxLongLongFmtSpec _T("ll")
#elif defined(__MINGW32__)
#define wxLongLong_t long long
#define wxLongLongSuffix ll
#define wxLongLongFmtSpec _T("I64")
#elif (defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG >= 8) || \
defined(__GNUC__) || \
defined(__CYGWIN__) || \
defined(__WXMICROWIN__) || \
(defined(__DJGPP__) && __DJGPP__ >= 2)
#define wxLongLong_t long long
#define wxLongLongSuffix ll
#define wxLongLongFmtSpec _T("ll")
#elif defined(__MWERKS__)
#if __option(longlong)
#define wxLongLong_t long long
#define wxLongLongSuffix ll
#define wxLongLongFmtSpec _T("ll")
#else
#error "The 64 bit integer support in CodeWarrior has been disabled."
#error "See the documentation on the 'longlong' pragma."
#endif
#elif defined(__VISAGECPP__) && __IBMCPP__ >= 400
#define wxLongLong_t long long
#endif
#ifdef wxLongLong_t
#ifdef __WXPALMOS__
#define wxULongLong_t uint64_t
#else
#define wxULongLong_t unsigned wxLongLong_t
#endif
/* these macros allow to definea 64 bit constants in a portable way */
#define wxLL(x) wxCONCAT(x, wxLongLongSuffix)
#define wxULL(x) wxCONCAT(x, wxCONCAT(u, wxLongLongSuffix))
typedef wxLongLong_t wxInt64;
typedef wxULongLong_t wxUint64;
#endif
/* Make sure ssize_t is defined (a signed type the same size as size_t) */
/* HAVE_SSIZE_T should be defined for compiliers that already have it */
#ifdef __MINGW32__
#if defined(_SSIZE_T_) && !defined(HAVE_SSIZE_T)
#define HAVE_SSIZE_T
#endif
#endif
#if defined(__PALMOS__) && !defined(HAVE_SSIZE_T)
#define HAVE_SSIZE_T
#endif
#if wxCHECK_WATCOM_VERSION(1,4)
#define HAVE_SSIZE_T
#endif
#ifndef HAVE_SSIZE_T
#if SIZEOF_SIZE_T == 4
typedef wxInt32 ssize_t;
#elif SIZEOF_SIZE_T == 8
typedef wxInt64 ssize_t;
#else
#error "error defining ssize_t, size_t is not 4 or 8 bytes"
#endif
#endif
/* base floating point types */
/* wxFloat32: 32 bit IEEE float ( 1 sign, 8 exponent bits, 23 fraction bits */
/* wxFloat64: 64 bit IEEE float ( 1 sign, 11 exponent bits, 52 fraction bits */
/* wxDouble: native fastest representation that has at least wxFloat64 */
/* precision, so use the IEEE types for storage, and this for */
/* calculations */
typedef float wxFloat32;
#if (defined( __WXMAC__ ) || defined(__WXCOCOA__)) && defined (__MWERKS__)
typedef short double wxFloat64;
#else
typedef double wxFloat64;
#endif
#if defined( __WXMAC__ ) && !defined( __POWERPC__ )
typedef long double wxDouble;
#else
typedef double wxDouble;
#endif
/*
Some (non standard) compilers typedef wchar_t as an existing type instead
of treating it as a real fundamental type, set wxWCHAR_T_IS_REAL_TYPE to 0
for them and to 1 for all the others.
*/
#if wxUSE_WCHAR_T
/*
VC++ typedefs wchar_t as unsigned short by default, that is unless
/Za or /Zc:wchar_t option is used in which case _WCHAR_T_DEFINED is
defined.
*/
# if defined(__VISUALC__) && !defined(_NATIVE_WCHAR_T_DEFINED)
# define wxWCHAR_T_IS_REAL_TYPE 0
# else /* compiler having standard-conforming wchar_t */
# define wxWCHAR_T_IS_REAL_TYPE 1
# endif
#endif /* wxUSE_WCHAR_T */
/* ---------------------------------------------------------------------------- */
/* byte ordering related definition and macros */
/* ---------------------------------------------------------------------------- */
/* byte sex */
#define wxBIG_ENDIAN 4321
#define wxLITTLE_ENDIAN 1234
#define wxPDP_ENDIAN 3412
#ifdef WORDS_BIGENDIAN
#define wxBYTE_ORDER wxBIG_ENDIAN
#else
#define wxBYTE_ORDER wxLITTLE_ENDIAN
#endif
/* byte swapping */
#if defined (__MWERKS__) && ( (__MWERKS__ < 0x0900) || macintosh )
/* assembler versions for these */
#ifdef __POWERPC__
inline wxUint16 wxUINT16_SWAP_ALWAYS( wxUint16 i )
{return (__lhbrx( &i , 0 ) );}
inline wxInt16 wxINT16_SWAP_ALWAYS( wxInt16 i )
{return (__lhbrx( &i , 0 ) );}
inline wxUint32 wxUINT32_SWAP_ALWAYS( wxUint32 i )
{return (__lwbrx( &i , 0 ) );}
inline wxInt32 wxINT32_SWAP_ALWAYS( wxInt32 i )
{return (__lwbrx( &i , 0 ) );}
#else
#pragma parameter __D0 wxUINT16_SWAP_ALWAYS(__D0)
pascal wxUint16 wxUINT16_SWAP_ALWAYS(wxUint16 value)
= { 0xE158 };
#pragma parameter __D0 wxINT16_SWAP_ALWAYS(__D0)
pascal wxInt16 wxINT16_SWAP_ALWAYS(wxInt16 value)
= { 0xE158 };
#pragma parameter __D0 wxUINT32_SWAP_ALWAYS (__D0)
pascal wxUint32 wxUINT32_SWAP_ALWAYS(wxUint32 value)
= { 0xE158, 0x4840, 0xE158 };
#pragma parameter __D0 wxINT32_SWAP_ALWAYS (__D0)
pascal wxInt32 wxINT32_SWAP_ALWAYS(wxInt32 value)
= { 0xE158, 0x4840, 0xE158 };
#endif
#else /* !MWERKS */
#define wxUINT16_SWAP_ALWAYS(val) \
((wxUint16) ( \
(((wxUint16) (val) & (wxUint16) 0x00ffU) << 8) | \
(((wxUint16) (val) & (wxUint16) 0xff00U) >> 8)))
#define wxINT16_SWAP_ALWAYS(val) \
((wxInt16) ( \
(((wxUint16) (val) & (wxUint16) 0x00ffU) << 8) | \
(((wxUint16) (val) & (wxUint16) 0xff00U) >> 8)))
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?