Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages
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! Include cssysdef.h instead. 00021 #endif 00022 00023 #ifndef __CS_CSDEF_H__ 00024 #define __CS_CSDEF_H__ 00025 00026 #include "csplatform.h" 00027 #include "cstypes.h" 00028 00029 #include <stdio.h> 00030 #include <stdlib.h> 00031 #if defined(CS_HAS_CMATH_H) 00032 #include <cmath> 00033 #else 00034 #include <math.h> 00035 #endif 00036 #include <time.h> 00037 #include <signal.h> 00038 #include <errno.h> 00039 #include <string.h> 00040 #include <assert.h> 00041 #ifdef CS_HAS_SYS_PARAM_H 00042 #include <sys/param.h> 00043 #endif 00044 00045 #ifndef MIN 00046 #define MIN(a,b) ((a)<(b)?(a):(b)) 00047 #endif 00048 00049 #ifndef MAX 00050 #define MAX(a,b) ((a)>(b)?(a):(b)) 00051 #endif 00052 00053 #ifndef ABS 00054 #define ABS(x) ((x)<0?-(x):(x)) 00055 #endif 00056 00057 #ifndef SIGN 00058 #define SIGN(x) ((x) < 0 ? -1 : ((x) > 0 ? 1 : 0)) 00059 #endif 00060 00061 #ifndef PI 00062 #define PI 3.1415926535897932385f 00063 #endif 00064 #ifndef HALF_PI 00065 #define HALF_PI (PI / 2.0f) 00066 #endif 00067 #ifndef TWO_PI 00068 #define TWO_PI (PI * 2.0f) 00069 #endif 00070 00071 #undef EPSILON 00072 #define EPSILON 0.001f /* Small value */ 00073 #undef SMALL_EPSILON 00074 #define SMALL_EPSILON 0.000001f /* Very small value */ 00075 #undef SMALL_EPSILON_D 00076 #define SMALL_EPSILON_D 0.000000000001f /* Very, very small value */ 00077 00078 // Platforms with compilers which only understand old-style C++ casting syntax 00079 // should define CS_USE_OLD_STYLE_CASTS. 00080 #if defined(CS_USE_OLD_STYLE_CASTS) 00081 #define CS_CAST(C,T,V) ((T)(V)) 00082 #else 00083 #define CS_CAST(C,T,V) (C<T>(V)) 00084 #endif 00085 00086 #define CS_STATIC_CAST(T,V) CS_CAST(static_cast,T,V) 00087 #define CS_DYNAMIC_CAST(T,V) CS_CAST(dynamic_cast,T,V) 00088 #define CS_REINTERPRET_CAST(T,V) CS_CAST(reinterpret_cast,T,V) 00089 #define CS_CONST_CAST(T,V) CS_CAST(const_cast,T,V) 00090 00091 // DEPRECATED use the CS_ prefix versions instead. 00092 #define STATIC_CAST(T,V) CS_STATIC_CAST(T,V) 00093 #define DYNAMIC_CAST(T,V) CS_DYNAMIC_CAST(T,V) 00094 #define REINTERPRET_CAST(T,V) CS_REINTERPRET_CAST(T,V) 00095 #define CONST_CAST(T,V) CS_CONST_CAST(T,V) 00096 00097 // Platforms which do not have floating-point variations of the standard math.h 00098 // cos(), sin(), tan(), sqrt(), etc. functions should define 00099 // CS_USE_FAKE_MATH_H_FLOAT_FUNCS. 00100 #if defined(CS_USE_FAKE_MATH_H_FLOAT_FUNCS) 00101 #define acosf(X) CS_STATIC_CAST(float,acos(X)) 00102 #define asinf(X) CS_STATIC_CAST(float,asin(X)) 00103 #define atan2f(X,Y) CS_STATIC_CAST(float,atan2(X,Y)) 00104 #define atanf(X) CS_STATIC_CAST(float,atan(X)) 00105 #define cosf(X) CS_STATIC_CAST(float,cos(X)) 00106 #define exp2f(X) CS_STATIC_CAST(float,exp2(X)) 00107 #define expf(X) CS_STATIC_CAST(float,exp(X)) 00108 #define fabsf(X) CS_STATIC_CAST(float,fabs(X)) 00109 #define log10f(X) CS_STATIC_CAST(float,log10(X)) 00110 #define log2f(X) CS_STATIC_CAST(float,log2(X)) 00111 #define logf(X) CS_STATIC_CAST(float,log(X)) 00112 #define powf(X) CS_STATIC_CAST(float,pow(X)) 00113 #define sinf(X) CS_STATIC_CAST(float,sin(X)) 00114 #define sqrtf(X) CS_STATIC_CAST(float,sqrt(X)) 00115 #define tanf(X) CS_STATIC_CAST(float,tan(X)) 00116 #define floorf(X) CS_STATIC_CAST(float,floor(X)) 00117 #define ceilf(X) CS_STATIC_CAST(float,ceil(X)) 00118 #endif 00119 00120 // Platforms with compilers which do not understand the new C++ keyword 00121 // `explicit' should define CS_USE_FAKE_EXPLICIT_KEYWORD. 00122 #if defined(CS_USE_FAKE_EXPLICIT_KEYWORD) 00123 #define explicit /* nothing */ 00124 #endif 00125 00126 // Platforms with compilers which do not understand the new C++ keyword 00127 // `typename' should define CS_USE_FAKE_TYPENAME_KEYWORD. For such compilers, 00128 // we fake up a `typename' keyword which can be used to declare template 00129 // arguments, such as: 00130 // 00131 // template<typename T> class A {...}; 00132 // 00133 // Furthermore, we fake up a synthesized `typename_qualifier' keyword which 00134 // should be used to qualify types within a template declaration rather than 00135 // using `typename'. Usage example: 00136 // 00137 // template<typename T> struct A { 00138 // typedef int B; 00139 // typename_qualifier C::B var; 00140 // typename_qualifier T::Functor get_functor() const; 00141 // }; 00142 #if defined(CS_USE_FAKE_TYPENAME_KEYWORD) 00143 #define typename class 00144 #define typename_qualifier 00145 #else 00146 #define typename_qualifier typename 00147 #endif 00148 00149 // Platforms with compilers which do not undersatnd the new C++ explicit 00150 // template specialization syntax `template<>' should define 00151 // CS_USE_OLD_TEMPLATE_SPECIALIZATION. 00152 #if defined(CS_USE_OLD_TEMPLATE_SPECIALIZATION) 00153 #define CS_SPECIALIZE_TEMPLATE 00154 #else 00155 #define CS_SPECIALIZE_TEMPLATE template<> 00156 #endif 00157 00158 // The smallest Z at which 3D clipping occurs 00159 #define SMALL_Z 0.01f 00160 00161 #endif // __CS_CSDEF_H__
Generated for Crystal Space by doxygen 1.3.9.1