comparison include/SDL_types.h @ 1353:7ba544e2888d

Started the process of improving configure support, and merging C types and library support into a single header.
author Sam Lantinga <slouken@libsdl.org>
date Thu, 09 Feb 2006 09:07:13 +0000
parents 1b5fbaf1d2c6
children 22f39393668a
comparison
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