CrystalSpace

Public API Reference

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