Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ode/ode-0.9/OPCODE/Ice/IceTypes.h @ 216

Last change on this file since 216 was 216, checked in by mathiask, 16 years ago

[Physik] add ode-0.9

File size: 7.5 KB
Line 
1///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2/**
3 *      Contains custom types.
4 *      \file           IceTypes.h
5 *      \author         Pierre Terdiman
6 *      \date           April, 4, 2000
7 */
8///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9
10///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11// Include Guard
12#ifndef __ICETYPES_H__
13#define __ICETYPES_H__
14
15///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
16// Things to help us compile on non-windows platforms
17
18#if defined(__MACOSX__) || defined(__APPLE__)
19#undef bool
20#define bool char
21#undef true
22#define true ((bool)-1)
23#undef false
24#define false ((bool)0)
25#endif // mac stuff
26
27///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
28
29        #define USE_HANDLE_MANAGER
30
31        // Constants
32        #define PI                                      3.1415926535897932384626433832795028841971693993751f    //!< PI
33        #define HALFPI                          1.57079632679489661923f                                                                 //!< 0.5 * PI
34        #define TWOPI                           6.28318530717958647692f                                                                 //!< 2.0 * PI
35        #define INVPI                           0.31830988618379067154f                                                                 //!< 1.0 / PI
36
37        #define RADTODEG                        57.2957795130823208768f                                                                 //!< 180.0 / PI, convert radians to degrees
38        #define DEGTORAD                        0.01745329251994329577f                                                                 //!< PI / 180.0, convert degrees to radians
39
40        #define EXP                                     2.71828182845904523536f                                                                 //!< e
41        #define INVLOG2                         3.32192809488736234787f                                                                 //!< 1.0 / log10(2)
42        #define LN2                                     0.693147180559945f                                                                              //!< ln(2)
43        #define INVLN2                          1.44269504089f                                                                                  //!< 1.0f / ln(2)
44
45        #define INV3                            0.33333333333333333333f                                                                 //!< 1/3
46        #define INV6                            0.16666666666666666666f                                                                 //!< 1/6
47        #define INV7                            0.14285714285714285714f                                                                 //!< 1/7
48        #define INV9                            0.11111111111111111111f                                                                 //!< 1/9
49        #define INV255                          0.00392156862745098039f                                                                 //!< 1/255
50
51        #define SQRT2                           1.41421356237f                                                                                  //!< sqrt(2)
52        #define INVSQRT2                        0.707106781188f                                                                                 //!< 1 / sqrt(2)
53
54        #define SQRT3                           1.73205080757f                                                                                  //!< sqrt(3)
55        #define INVSQRT3                        0.577350269189f                                                                                 //!< 1 / sqrt(3)
56
57        #define null                            0                                                                                                               //!< our own NULL pointer
58
59        // Custom types used in ICE
60        typedef signed char                     sbyte;          //!< sizeof(sbyte)      must be 1
61        typedef unsigned char           ubyte;          //!< sizeof(ubyte)      must be 1
62        typedef signed short            sword;          //!< sizeof(sword)      must be 2
63        typedef unsigned short          uword;          //!< sizeof(uword)      must be 2
64        typedef signed int                      sdword;         //!< sizeof(sdword)     must be 4
65        typedef unsigned int            udword;         //!< sizeof(udword)     must be 4
66        typedef signed __int64          sqword;         //!< sizeof(sqword)     must be 8
67        typedef unsigned __int64        uqword;         //!< sizeof(uqword)     must be 8
68        typedef float                           float32;        //!< sizeof(float32)    must be 4
69        typedef double                          float64;        //!< sizeof(float64)    must be 4
70
71        ICE_COMPILE_TIME_ASSERT(sizeof(bool)==1);       // ...otherwise things might fail with VC++ 4.2 !
72        ICE_COMPILE_TIME_ASSERT(sizeof(ubyte)==1);
73        ICE_COMPILE_TIME_ASSERT(sizeof(sbyte)==1);
74        ICE_COMPILE_TIME_ASSERT(sizeof(sword)==2);
75        ICE_COMPILE_TIME_ASSERT(sizeof(uword)==2);
76        ICE_COMPILE_TIME_ASSERT(sizeof(udword)==4);
77        ICE_COMPILE_TIME_ASSERT(sizeof(sdword)==4);
78        ICE_COMPILE_TIME_ASSERT(sizeof(uqword)==8);
79        ICE_COMPILE_TIME_ASSERT(sizeof(sqword)==8);
80
81        //! TO BE DOCUMENTED
82        #define DECLARE_ICE_HANDLE(name)        struct name##__ { int unused; }; typedef struct name##__ *name
83
84        typedef udword                          DynID;          //!< Dynamic identifier
85#ifdef USE_HANDLE_MANAGER
86        typedef udword                          KID;            //!< Kernel ID
87//      DECLARE_ICE_HANDLE(KID);
88#else
89        typedef uword                           KID;            //!< Kernel ID
90#endif
91        typedef udword                          RTYPE;          //!< Relationship-type (!) between owners and references
92        #define INVALID_ID                      0xffffffff      //!< Invalid dword ID (counterpart of null pointers)
93#ifdef USE_HANDLE_MANAGER
94        #define INVALID_KID                     0xffffffff      //!< Invalid Kernel ID
95#else
96        #define INVALID_KID                     0xffff          //!< Invalid Kernel ID
97#endif
98        #define INVALID_NUMBER          0xDEADBEEF      //!< Standard junk value
99
100        // Define BOOL if needed
101        #ifndef BOOL
102        typedef int     BOOL;                                           //!< Another boolean type.
103        #endif
104
105        //! Union of a float and a sdword
106        typedef union {
107                float   f;                                                      //!< The float
108                sdword  d;                                                      //!< The integer
109        }scell;
110
111        //! Union of a float and a udword
112        typedef union {
113                float   f;                                                      //!< The float
114                udword  d;                                                      //!< The integer
115        }ucell;
116
117        // Type ranges
118        #define MAX_SBYTE                               0x7f                                            //!< max possible sbyte value
119        #define MIN_SBYTE                               0x80                                            //!< min possible sbyte value
120        #define MAX_UBYTE                               0xff                                            //!< max possible ubyte value
121        #define MIN_UBYTE                               0x00                                            //!< min possible ubyte value
122        #define MAX_SWORD                               0x7fff                                          //!< max possible sword value
123        #define MIN_SWORD                               0x8000                                          //!< min possible sword value
124        #define MAX_UWORD                               0xffff                                          //!< max possible uword value
125        #define MIN_UWORD                               0x0000                                          //!< min possible uword value
126        #define MAX_SDWORD                              0x7fffffff                                      //!< max possible sdword value
127        #define MIN_SDWORD                              0x80000000                                      //!< min possible sdword value
128        #define MAX_UDWORD                              0xffffffff                                      //!< max possible udword value
129        #define MIN_UDWORD                              0x00000000                                      //!< min possible udword value
130        #define MAX_FLOAT                               FLT_MAX                                         //!< max possible float value
131        #define MIN_FLOAT                               (-FLT_MAX)                                      //!< min possible loat value
132        #define IEEE_1_0                                0x3f800000                                      //!< integer representation of 1.0
133        #define IEEE_255_0                              0x437f0000                                      //!< integer representation of 255.0
134        #define IEEE_MAX_FLOAT                  0x7f7fffff                                      //!< integer representation of MAX_FLOAT
135        #define IEEE_MIN_FLOAT                  0xff7fffff                                      //!< integer representation of MIN_FLOAT
136        #define IEEE_UNDERFLOW_LIMIT    0x1a000000
137
138        #define ONE_OVER_RAND_MAX               (1.0f / float(RAND_MAX))        //!< Inverse of the max possible value returned by rand()
139
140        typedef int                                     (__stdcall* PROC)();                    //!< A standard procedure call.
141        typedef bool                            (*ENUMERATION)(udword value, udword param, udword context);     //!< ICE standard enumeration call
142        typedef void**                          VTABLE;                                                 //!< A V-Table.
143
144        #undef          MIN
145        #undef          MAX
146        #define         MIN(a, b)       ((a) < (b) ? (a) : (b))                 //!< Returns the min value between a and b
147        #define         MAX(a, b)       ((a) > (b) ? (a) : (b))                 //!< Returns the max value between a and b
148        #define         MAXMAX(a,b,c)   ((a) > (b) ? MAX (a,c) : MAX (b,c))     //!<    Returns the max value between a, b and c
149
150        template<class T>       inline_ const T&        TMin    (const T& a, const T& b)        { return b < a ? b : a; }
151        template<class T>       inline_ const T&        TMax    (const T& a, const T& b)        { return a < b ? b : a; }
152        template<class T>       inline_ void            TSetMin (T& a, const T& b)                      { if(a>b)       a = b;          }
153        template<class T>       inline_ void            TSetMax (T& a, const T& b)                      { if(a<b)       a = b;          }
154
155        #define         SQR(x)                  ((x)*(x))                                               //!< Returns x square
156        #define         CUBE(x)                 ((x)*(x)*(x))                                   //!< Returns x cube
157
158        #define         AND             &                                                                               //!< ...
159        #define         OR              |                                                                               //!< ...
160        #define         XOR             ^                                                                               //!< ...
161
162        #define         QUADRAT(x)              ((x)*(x))                                               //!< Returns x square
163
164#ifdef _WIN32
165#   define srand48(x) srand((unsigned int) (x))
166#       define srandom(x) srand((unsigned int) (x))
167#       define random()   ((double) rand())
168#   define drand48()  ((double) (((double) rand()) / ((double) RAND_MAX)))
169#endif
170
171#endif // __ICETYPES_H__
Note: See TracBrowser for help on using the repository browser.