csdef.h
00001 /* 00002 Copyright (C) 1998-2000 by Jorrit Tyberghein 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public 00015 License along with this library; if not, write to the Free 00016 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 #if !defined(CSDEF_FRIEND) 00020 #error You are not allowed to include this file! Use cssysdef.h instead. 00021 #endif 00022 00023 #ifndef __CS_CSDEF_H__ 00024 #define __CS_CSDEF_H__ 00025 00026 #include "platform.h" 00027 #include "cstypes.h" 00028 00029 #include <stdio.h> 00030 #include <stdlib.h> 00031 #include <math.h> 00032 #include <time.h> 00033 #include <signal.h> 00034 #include <errno.h> 00035 #include <string.h> 00036 #include <assert.h> 00037 00038 // DEPRECATED use "true" instead 00039 #ifndef TRUE 00040 #define TRUE 1 00041 #endif 00042 00043 // DEPRECATED use "false" instead 00044 #ifndef FALSE 00045 #define FALSE 0 00046 #endif 00047 00048 #ifndef MIN 00049 #define MIN(a,b) ((a)<(b)?(a):(b)) 00050 #endif 00051 00052 #ifndef MAX 00053 #define MAX(a,b) ((a)>(b)?(a):(b)) 00054 #endif 00055 00056 #ifndef ABS 00057 #define ABS(x) ((x)<0?-(x):(x)) 00058 #endif 00059 00060 #ifndef SIGN 00061 #define SIGN(x) ((x) < 0 ? -1 : ((x) > 0 ? 1 : 0)) 00062 #endif 00063 00064 #ifndef PI 00065 #define PI 3.1415926535897932385f 00066 #endif 00067 #ifndef HALF_PI 00068 #define HALF_PI (PI / 2.0f) 00069 #endif 00070 #ifndef TWO_PI 00071 #define TWO_PI (PI * 2.0f) 00072 #endif 00073 00074 #undef EPSILON 00075 #define EPSILON 0.001f /* Small value */ 00076 #undef SMALL_EPSILON 00077 #define SMALL_EPSILON 0.000001f /* Very small value */ 00078 #undef SMALL_EPSILON_D 00079 #define SMALL_EPSILON_D 0.000000000001f /* Very, very small value */ 00080 00081 // Platforms with compilers which only understand old-style C++ casting syntax 00082 // should define CS_USE_OLD_STYLE_CASTS. 00083 #if defined(CS_USE_OLD_STYLE_CASTS) 00084 #define CS_CAST(C,T,V) ((T)(V)) 00085 #else 00086 #define CS_CAST(C,T,V) (C<T>(V)) 00087 #endif 00088 00089 #define CS_STATIC_CAST(T,V) CS_CAST(static_cast,T,V) 00090 #define CS_DYNAMIC_CAST(T,V) CS_CAST(dynamic_cast,T,V) 00091 #define CS_REINTERPRET_CAST(T,V) CS_CAST(reinterpret_cast,T,V) 00092 #define CS_CONST_CAST(T,V) CS_CAST(const_cast,T,V) 00093 00094 // DEPRECATED use the CS_ prefix versions instead. 00095 #define STATIC_CAST(T,V) CS_STATIC_CAST(T,V) 00096 #define DYNAMIC_CAST(T,V) CS_DYNAMIC_CAST(T,V) 00097 #define REINTERPRET_CAST(T,V) CS_REINTERPRET_CAST(T,V) 00098 #define CONST_CAST(T,V) CS_CONST_CAST(T,V) 00099 00100 // Platforms which do not have floating-point variations of the standard math.h 00101 // cos(), sin(), tan(), sqrt(), etc. functions should define 00102 // CS_USE_FAKE_MATH_H_FLOAT_FUNCS. 00103 #if defined(CS_USE_FAKE_MATH_H_FLOAT_FUNCS) 00104 #define acosf(X) CS_STATIC_CAST(float,acos(X)) 00105 #define asinf(X) CS_STATIC_CAST(float,asin(X)) 00106 #define atan2f(X) CS_STATIC_CAST(float,atan2(X)) 00107 #define atanf(X) CS_STATIC_CAST(float,atan(X)) 00108 #define cosf(X) CS_STATIC_CAST(float,cos(X)) 00109 #define exp2f(X) CS_STATIC_CAST(float,exp2(X)) 00110 #define expf(X) CS_STATIC_CAST(float,exp(X)) 00111 #define log10f(X) CS_STATIC_CAST(float,log10(X)) 00112 #define log2f(X) CS_STATIC_CAST(float,log2(X)) 00113 #define logf(X) CS_STATIC_CAST(float,log(X)) 00114 #define powf(X) CS_STATIC_CAST(float,pow(X)) 00115 #define sinf(X) CS_STATIC_CAST(float,sin(X)) 00116 #define sqrtf(X) CS_STATIC_CAST(float,sqrt(X)) 00117 #define tanf(X) CS_STATIC_CAST(float,tan(X)) 00118 #define floorf(X) CS_STATIC_CAST(float,floor(X)) 00119 #define ceilf(X) CS_STATIC_CAST(float,ceil(X)) 00120 #endif 00121 00122 // Platforms with compilers which do not understand the new C++ keyword 00123 // `explicit' should define CS_USE_FAKE_EXPLICIT_KEYWORD. 00124 #if defined(CS_USE_FAKE_EXPLICIT_KEYWORD) 00125 #define explicit /* nothing */ 00126 #endif 00127 00128 // Platforms with compilers which do not understand the new C++ keyword 00129 // `typename' should define CS_USE_FAKE_TYPENAME_KEYWORD. 00130 #if defined(CS_USE_FAKE_TYPENAME_KEYWORD) 00131 #define typename /* nothing */ 00132 #endif 00133 00134 // Platforms with compilers which do not undersatnd the new C++ explicit 00135 // template specialization syntax `template<>' should define 00136 // CS_USE_OLD_TEMPLATE_SPECIALIZATION. 00137 #if defined(CS_USE_OLD_TEMPLATE_SPECIALIZATION) 00138 #define CS_SPECIALIZE_TEMPLATE 00139 #else 00140 #define CS_SPECIALIZE_TEMPLATE template<> 00141 #endif 00142 00143 // The smallest Z at which 3D clipping occurs 00144 #define SMALL_Z 0.01f 00145 00146 #endif // __CS_CSDEF_H__
Generated for Crystal Space by doxygen 1.2.18