Simplified include/osg/Math to use Standard C++ maths headers - <cmath> and <cfloat>
This commit is contained in:
123
include/osg/Math
123
include/osg/Math
@@ -14,109 +14,11 @@
|
||||
#ifndef __OSG_MATH
|
||||
#define __OSG_MATH
|
||||
|
||||
#include <math.h>
|
||||
#include <cmath>
|
||||
#include <cfloat>
|
||||
|
||||
#include <osg/Export>
|
||||
|
||||
//certain math functions were not defined until 10.2
|
||||
//so this code checks the version so it can add in workarounds for older versions.
|
||||
#ifdef __APPLE__
|
||||
// Using std::isnan will work for OS X, but use of <cmath>
|
||||
// and std:: are not necessarily portible with other systems so
|
||||
// the include of <cmath> is isolated here.
|
||||
#include <cmath>
|
||||
#include <AvailabilityMacros.h>
|
||||
#if !defined(MAC_OS_X_VERSION_10_2) || (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_2)
|
||||
// One extra check to verify the gcc version.
|
||||
// The assumption is that there is no possible way to use gcc 4+
|
||||
// on anything less than 10.3.9. So if gcc 4 is in use, this means
|
||||
// pre-10.2 support is not intended and we need not define APPLE_PRE_10_2.
|
||||
// The reason for this extra check is that if the user relies on default
|
||||
// settings, MAC_OS_X_VERSION_MIN_REQUIRED will be set to 1010 and hit
|
||||
// this code path, but this is probably not what they want if using gcc 4+.
|
||||
#if (__GNUC__ < 4)
|
||||
#define APPLE_PRE_10_2
|
||||
#endif
|
||||
|
||||
#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6)
|
||||
#define APPLE_PRE_10_6
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#include <float.h>
|
||||
#endif
|
||||
|
||||
#if defined (sun) || \
|
||||
defined (APPLE_PRE_10_6) || \
|
||||
(defined (_AIX) && defined (__GNUC__))
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#ifndef acosf
|
||||
inline float acosf(float value) { return static_cast<float>(acos(value)); }
|
||||
#endif
|
||||
|
||||
#ifndef asinf
|
||||
inline float asinf(float value) { return static_cast<float>(asin(value)); }
|
||||
#endif
|
||||
|
||||
#ifndef cosf
|
||||
inline float cosf(float value) { return static_cast<float>(cos(value)); }
|
||||
#endif
|
||||
|
||||
#ifndef sinf
|
||||
inline float sinf(float value) { return static_cast<float>(sin(value)); }
|
||||
#endif
|
||||
|
||||
#ifndef logf
|
||||
inline float logf(float value) { return static_cast<float>(log(value)); }
|
||||
#endif
|
||||
|
||||
#ifndef powf
|
||||
inline float powf(float value1,float value2) { return static_cast<float>(pow(value1,value2)); }
|
||||
#endif
|
||||
|
||||
#ifndef sqrtf
|
||||
inline float sqrtf(float value) { return static_cast<float>(sqrt(value)); }
|
||||
#endif
|
||||
|
||||
#ifndef fabsf
|
||||
inline float fabsf(float value) { return static_cast<float>(fabs(value)); }
|
||||
#endif
|
||||
|
||||
#ifndef atan2f
|
||||
inline float atan2f(float value1, float value2) { return static_cast<float>(atan2(value1,value2)); }
|
||||
#endif
|
||||
|
||||
#ifndef fmodf
|
||||
inline float fmodf(float value1, float value2) { return static_cast<float>(fmod(value1,value2)); }
|
||||
#endif
|
||||
|
||||
#ifndef tanf
|
||||
inline float tanf(float value) { return static_cast<float>(tan(value)); }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if defined (sun) || \
|
||||
defined (__hpux) || \
|
||||
defined (APPLE_PRE_10_2) || \
|
||||
(defined (_AIX) && defined (__GNUC__))
|
||||
|
||||
#ifndef floorf
|
||||
inline float floorf(float value) { return static_cast<float>(floor(value)); }
|
||||
#endif
|
||||
|
||||
#ifndef ceilf
|
||||
inline float ceilf(float value) { return static_cast<float>(ceil(value)); }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
namespace osg {
|
||||
|
||||
// define the standard trig values
|
||||
@@ -168,8 +70,7 @@ template<typename T>
|
||||
inline T maximum(T lhs,T rhs) { return lhs>rhs?lhs:rhs; }
|
||||
|
||||
template<typename T>
|
||||
inline T clampTo(T v,T minimum,T maximum)
|
||||
{ return v<minimum?minimum:v>maximum?maximum:v; }
|
||||
inline T clampTo(T v,T minimum,T maximum) { return v<minimum?minimum:v>maximum?maximum:v; }
|
||||
|
||||
template<typename T>
|
||||
inline T clampAbove(T v,T minimum) { return v<minimum?minimum:v; }
|
||||
@@ -208,23 +109,11 @@ inline double RadiansToDegrees(double angle) { return angle*180.0/PI; }
|
||||
inline float round(float v) { return v>=0.0f?floorf(v+0.5f):ceilf(v-0.5f); }
|
||||
inline double round(double v) { return v>=0.0?floor(v+0.5):ceil(v-0.5); }
|
||||
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MWERKS__)
|
||||
inline bool isNaN(float v) { return _isnan(v)!=0; }
|
||||
#if defined(_MSC_VER)
|
||||
inline bool isNaN(double v) { return _isnan(v)!=0; }
|
||||
#else
|
||||
#if defined(__APPLE__)
|
||||
inline bool isNaN(float v) { return std::isnan(v); }
|
||||
inline bool isNaN(double v) { return std::isnan(v); }
|
||||
#else
|
||||
#ifdef isnan
|
||||
inline bool isNaN(float v) { return isnan(v); }
|
||||
inline bool isNaN(double v) { return isnan(v); }
|
||||
#else
|
||||
// Need to use to std::isnan to avoid undef problem from <cmath>
|
||||
inline bool isNaN(float v) { return std::isnan(v); }
|
||||
inline bool isNaN(double v) { return std::isnan(v); }
|
||||
#endif
|
||||
#endif
|
||||
inline bool isNaN(float v) { return std::isnan(v); }
|
||||
inline bool isNaN(double v) { return std::isnan(v); }
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user