include/SDL_types.h
changeset 1353 7ba544e2888d
parent 1346 1b5fbaf1d2c6
child 1354 22f39393668a
equal deleted inserted replaced
1352:c643342f3f33 1353:7ba544e2888d
    18 
    18 
    19     Sam Lantinga
    19     Sam Lantinga
    20     slouken@libsdl.org
    20     slouken@libsdl.org
    21 */
    21 */
    22 
    22 
    23 /* General data types used by the SDL library */
    23 #include "SDL_stdinc.h"
    24 
       
    25 #ifndef _SDL_types_h
       
    26 #define _SDL_types_h
       
    27 
       
    28 #include <sys/types.h>
       
    29 #ifdef _MSC_VER
       
    30 #ifndef _SIZE_T_DEFINED
       
    31 #ifdef  _WIN64
       
    32 typedef unsigned __int64    size_t;
       
    33 #else
       
    34 typedef _W64 unsigned int   size_t;
       
    35 #endif
       
    36 #define _SIZE_T_DEFINED
       
    37 #endif
       
    38 typedef size_t uintptr_t;
       
    39 #endif
       
    40 
       
    41 /* The number of elements in an array */
       
    42 #define SDL_arraysize(array)	(sizeof(array)/sizeof(array[0]))
       
    43 #define SDL_TABLESIZE(table)	SDL_arraysize(table)
       
    44 
       
    45 /* Basic data types */
       
    46 typedef enum SDL_bool {
       
    47 	SDL_FALSE = 0,
       
    48 	SDL_TRUE  = 1
       
    49 } SDL_bool;
       
    50 
       
    51 #ifdef H_MMBASIC /* mmbasic.h (Tru64 MME) */
       
    52 /* Some of the basic types are already defined in mmbasic.h */
       
    53 typedef signed char	Sint8;
       
    54 typedef signed short	Sint16;
       
    55 typedef signed int	Sint32;
       
    56 #else
       
    57 typedef unsigned char	Uint8;
       
    58 typedef signed char	Sint8;
       
    59 typedef unsigned short	Uint16;
       
    60 typedef signed short	Sint16;
       
    61 typedef unsigned int	Uint32;
       
    62 typedef signed int	Sint32;
       
    63 #endif
       
    64 
       
    65 /* Figure out how to support 64-bit datatypes */
       
    66 #if !defined(__STRICT_ANSI__)
       
    67 #ifdef __osf__ /* Tru64 */
       
    68 #define SDL_HAS_64BIT_TYPE	long
       
    69 #elif defined(__GNUC__) || defined(__MWERKS__) || defined(__SUNPRO_C) || defined(__DECC) || defined(__WATCOMC__)
       
    70 #define SDL_HAS_64BIT_TYPE	long long
       
    71 #elif defined(_MSC_VER) /* VC++ */
       
    72 #define SDL_HAS_64BIT_TYPE	__int64
       
    73 #endif
       
    74 #endif /* !__STRICT_ANSI__ */
       
    75 
       
    76 /* The 64-bit type isn't available on EPOC/Symbian OS */
       
    77 #ifdef __SYMBIAN32__
       
    78 #undef SDL_HAS_64BIT_TYPE
       
    79 #endif
       
    80 
       
    81 /* The 64-bit datatype isn't supported on all platforms */
       
    82 #ifdef SDL_HAS_64BIT_TYPE
       
    83 #ifndef H_MMBASIC
       
    84 typedef unsigned SDL_HAS_64BIT_TYPE Uint64;
       
    85 #endif
       
    86 typedef SDL_HAS_64BIT_TYPE Sint64;
       
    87 #else
       
    88 /* This is really just a hack to prevent the compiler from complaining */
       
    89 typedef struct {
       
    90 	Uint32 hi;
       
    91 	Uint32 lo;
       
    92 } Uint64, Sint64;
       
    93 #endif
       
    94 
       
    95 /* Make sure the types really have the right sizes */
       
    96 #define SDL_COMPILE_TIME_ASSERT(name, x)               \
       
    97        typedef int SDL_dummy_ ## name[(x) * 2 - 1]
       
    98 
       
    99 SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1);
       
   100 SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1);
       
   101 SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2);
       
   102 SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2);
       
   103 SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4);
       
   104 SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4);
       
   105 SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8);
       
   106 SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8);
       
   107 
       
   108 /* Check to make sure enums are the size of ints, for structure packing.
       
   109    For both Watcom C/C++ and Borland C/C++ the compiler option that makes
       
   110    enums having the size of an int must be enabled.
       
   111    This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11).
       
   112 */
       
   113 /* Enable enums always int in CodeWarrior (for MPW use "-enum int") */
       
   114 #ifdef __MWERKS__
       
   115 #pragma enumsalwaysint on
       
   116 #endif
       
   117 
       
   118 typedef enum {
       
   119 	DUMMY_ENUM_VALUE
       
   120 } SDL_DUMMY_ENUM;
       
   121 
       
   122 SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int));
       
   123 
       
   124 #endif