- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List

# platform.h

    00001 /* include/geos/platform.h.  Generated from platform.h.in by configure.  */
    00002 #ifndef GEOS_PLATFORM_H
    00003 #define GEOS_PLATFORM_H
    00004
    00005 /* Set to 1 if you have `int64_t' type */
    00006 /* #undef HAVE_INT64_T_64 */
    00007
    00008 /* Set to 1 if `long int' is 64 bits */
    00009 #define HAVE_LONG_INT_64 1
    00010
    00011 /* Set to 1 if `long long int' is 64 bits */
    00012 /* #undef HAVE_LONG_LONG_INT_64 */
    00013
    00014 /* Set to 1 if you have ieeefp.h */
    00015 #define HAVE_IEEEFP_H 1
    00016
    00017 /* Has finite */
    00018 #define HAVE_FINITE 1
    00019
    00020 /* Has isfinite */
    00021 #define HAVE_ISFINITE 1
    00022
    00023 /* Has isnan */
    00024 /* #undef HAVE_ISNAN */
    00025
    00026 #ifdef HAVE_IEEEFP_H
    00027 extern "C"
    00028 {
    00029 #include <ieeefp.h>
    00030 }
    00031 #endif
    00032
    00033 #ifdef HAVE_INT64_T_64
    00034 extern "C"
    00035 {
    00036 #include <inttypes.h>
    00037 }
    00038 #endif
    00039
    00040 #if defined(__GNUC__) && defined(_WIN32)
    00041 /* For MingW the appropriate definitions are included in
    00042  math.h and float.h but the definitions in
    00043  math.h are only included if __STRICT_ANSI__
    00044  is not defined.  Since GEOS is compiled with -ansi that
    00045  means those definitions are not available. */
    00046 #include <float.h>
    00047 #endif
    00048
    00049 #include <limits> // for std::numeric_limits
    00050
    00051
    00052
    00053 //Defines NaN for intel platforms
    00054 #define DoubleNotANumber std::numeric_limits<double>::quiet_NaN()
    00055
    00056 //Don't forget to define infinities
    00057 #define DoubleInfinity std::numeric_limits<double>::infinity()
    00058 #define DoubleNegInfinity -std::numeric_limits<double>::infinity()
    00059
    00060 #define DoubleMax std::numeric_limits<double>::max()
    00061
    00062 #ifdef HAVE_INT64_T_64
    00063   typedef int64_t int64;
    00064 #else
    00065 # ifdef HAVE_LONG_LONG_INT_64
    00066    typedef long long int int64;
    00067 # else
    00068    typedef long int int64;
    00069 #  ifndef HAVE_LONG_INT_64
    00070 #   define INT64_IS_REALLY32 1
    00071 #   warning "Could not find 64bit integer definition!"
    00072 #  endif
    00073 # endif
    00074 #endif
    00075
    00076
    00077 #if defined(HAVE_FINITE) && !defined(HAVE_ISFINITE)
    00078 # define FINITE(x) (finite(x))
    00079 #else
    00080 # if defined(_MSC_VER)
    00081 #  define FINITE(x) _finite(static_cast<double>(x))
    00082 # else
    00083 #  define FINITE(x) (isfinite(x))
    00084 # endif
    00085 #endif
    00086
    00087 #if defined(HAVE_ISNAN)
    00088 # define ISNAN(x) (isnan(x))
    00089 #else
    00090 # if defined(_MSC_VER)
    00091 #  define ISNAN(x) _isnan(x)
    00092 # elif defined(__MINGW32__)
    00093 // sandro furieri: sanitizing MinGW32
    00094 #  define ISNAN(x) (std::isnan(x))
    00095 # elif defined(__OSX__) || defined(__APPLE__) || defined(__OpenBSD__)
    00096    // Hack for OS/X <cmath> incorrectly re-defining isnan() into oblivion.
    00097    // It does leave a version in std.
    00098 #  define ISNAN(x) (std::isnan(x))
    00099 # elif defined(__sun) || defined(__sun__)
    00100 #  include <math.h>
    00101 #  define ISNAN(x) (::isnan(x))
    00102 # endif
    00103 #endif
    00104
    00105 #ifndef FINITE
    00106 #error "Can not compile without finite or isfinite function or macro"
    00107 #endif
    00108
    00109 #ifndef ISNAN
    00110 #error "Can not compile without isnan function or macro"
    00111 #endif
    00112
    00113 #endif