19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CMATH
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_CMATH
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* gcc do not like when a using directive appear after a function
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * declaration. cmath have abs overloads and cstdlib a using directive
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * so cstdlib has to be included first.
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__GNUC__) && defined (_STLP_USE_NEW_C_HEADERS)
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_HAS_INCLUDE_NEXT)
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    include_next <cstdlib>
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    include _STLP_NATIVE_CPP_C_HEADER(cstdlib)
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_NEW_C_HEADERS)
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_HAS_NO_NAMESPACES) && !defined (exception)
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define exception __math_exception
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_HAS_INCLUDE_NEXT)
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    include_next <cmath>
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#    include _STLP_NATIVE_CPP_C_HEADER(cmath)
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_HAS_NO_NAMESPACES)
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef exception
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <math.h>
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if (defined (__SUNPRO_CC) && (__SUNPRO_CC > 0x500)) || \
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     !(defined (__IBMCPP__) && (__IBMCPP__ >= 500) || !(defined(__HP_aCC) && (__HP_aCC >= 30000) ))
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined(_STLP_HAS_NO_NAMESPACES) && !defined(__SUNPRO_CC)
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// All the other hypot stuff is going to be at file scope, so follow along here.
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknamespace std {
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern "C" double hypot(double x, double y);
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined(_STLP_HAS_NO_NAMESPACES) && !defined(__SUNPRO_CC)
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__sun) && defined (__GNUC__)
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern "C" {
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  float __cosf(float v);
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  float __sinf(float v);
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  float __atan2f(float, float);
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  float __coshf(float v);
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  float __sinhf(float v);
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  float __sqrtf(float v);
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  float __expf(float v);
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  float __logf(float v);
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  float __log10f(float v);
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  long double __cosl(long double v);
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  long double __sinl(long double v);
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  long double __atan2l(long double, long double);
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  long double __coshl(long double v);
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  long double __sinhl(long double v);
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  long double __sqrtl(long double v);
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  long double __expl(long double v);
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  long double __logl(long double v);
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  long double __log10l(long double v);
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern "C" {
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline float cosf(float v) { return __cosf(v); }
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline float sinf(float v) { return __sinf(v); }
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline float atan2f(float v1, float v2) { return __atan2f(v1,v2); }
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline float coshf(float v) { return __coshf(v); }
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline float sinhf(float v) { return __sinhf(v); }
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline float sqrtf(float v) { return __sqrtf(v); }
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline float expf(float v) { return __expf(v); }
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline float logf(float v) { return __logf(v); }
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline float log10f(float v) { return __log10f(v); }
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline long double cosl(long double v) { return __cosl(v); }
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline long double sinl(long double v) { return __sinl(v); }
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline long double atan2l(long double v1, long double v2) { return __atan2l(v1,v2); }
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline long double coshl(long double v) { return __coshl(v); }
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline long double sinhl(long double v) { return __sinhl(v); }
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline long double sqrtl(long double v) { return __sqrtl(v); }
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline long double expl(long double v) { return __expl(v); }
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline long double logl(long double v) { return __logl(v); }
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline long double log10l(long double v) { return __log10l(v); }
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif // __sun && __GNUC__
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__sun)
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern "C" {
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __acosf(float);
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __asinf(float);
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __atanf(float);
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __atan2f(float, float);
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __ceilf(float);
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __cosf(float);
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __coshf(float);
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __expf(float);
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __fabsf(float);
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __floorf(float);
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __fmodf(float, float);
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __frexpf(float, int *);
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __ldexpf(float, int);
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __logf(float);
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __log10f(float);
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __modff(float, float *);
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __powf(float, float);
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __sinf(float);
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __sinhf(float);
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __sqrtf(float);
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __tanf(float);
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern float __tanhf(float);
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __acosl(long double);
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __asinl(long double);
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __atanl(long double);
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __atan2l(long double, long double);
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __ceill(long double);
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __cosl(long double);
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __coshl(long double);
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __expl(long double);
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __fabsl(long double);
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __floorl(long double);
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __fmodl(long double, long double);
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __frexpl(long double, int *);
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __ldexpl(long double, int);
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __logl(long double);
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __log10l(long double);
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __modfl(long double, long double *);
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __powl(long double, long double);
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __sinl(long double);
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __sinhl(long double);
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __sqrtl(long double);
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __tanl(long double);
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern long double __tanhl(long double);
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__BORLANDC__)
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_CMATH_FUNC_NAMESPACE _STLP_VENDOR_CSTD
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_CMATH_FUNC_NAMESPACE
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (__sun) || defined (__GNUC__)
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MATH_INLINE(float_type, func, cfunc) \
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     inline float_type func (float_type x) { return _STLP_CMATH_FUNC_NAMESPACE::cfunc(x); }
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MATH_INLINE2(float_type, type, func, cfunc) \
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     inline float_type func (float_type x, type y) { return _STLP_CMATH_FUNC_NAMESPACE::cfunc(x, y); }
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MATH_INLINE_D(float_type, func, cfunc)
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_MATH_INLINE2_D(float_type, type, func, cfunc)
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifdef __SUNPRO_CC
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_MATH_INLINE(float_type, func, cfunc) \
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       inline float_type func (float_type x) { return _STLP_VENDOR_CSTD::__##cfunc(x); }
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_MATH_INLINE_D(float_type, func, cfunc) \
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       inline float_type func (float_type x) { return _STLP_VENDOR_CSTD::cfunc(x); }
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_MATH_INLINE2(float_type, type, func, cfunc) \
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       inline float_type func (float_type x, type y) { return _STLP_VENDOR_CSTD::__##cfunc(x,y); }
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    define _STLP_MATH_INLINE2_D(float_type, type, func, cfunc) \
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       inline float_type func (float_type x, type y) { return _STLP_VENDOR_CSTD::cfunc(x,y); }
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    error Unknown compiler for the Sun platform
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/** macros to define math functions
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve BlockThese macros (having an X somewhere in the name) forward to the C library's
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdouble functions but cast the arguments and return values to the given type. */
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_MATH_INLINEX(__type,func,cfunc) \
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline __type func (__type x) \
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return __STATIC_CAST(__type, _STLP_CMATH_FUNC_NAMESPACE::cfunc((double)x)); }
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_MATH_INLINE2X(__type1,__type2,func,cfunc) \
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline __type1 func (__type1 x, __type2 y) \
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return __STATIC_CAST(__type1, _STLP_CMATH_FUNC_NAMESPACE::cfunc((double)x, y)); }
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_MATH_INLINE2PX(__type,func,cfunc) \
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline __type func (__type x, __type *y) { \
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    double tmp1, tmp2; \
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    tmp1 = _STLP_CMATH_FUNC_NAMESPACE::cfunc(__STATIC_CAST(double, x), &tmp2); \
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    *y = __STATIC_CAST(__type, tmp2); \
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __STATIC_CAST(__type, tmp1); \
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_MATH_INLINE2XX(__type,func,cfunc) \
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline __type func (__type x, __type y) \
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return __STATIC_CAST(__type, _STLP_CMATH_FUNC_NAMESPACE::cfunc((double)x, (double)y)); }
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/** rough characterization of compiler and native C library
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve BlockFor the compiler, it can either support long double or not. If it doesn't, the
2081fdd84fe0415e188d955861be0afe8391372cf30Andrew Hsiehmacro _STLP_NO_LONG_DOUBLE is defined and we don't define any long double
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoverloads.
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve BlockFor the native C library the question is whether it has variants with an 'f'
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocksuffix (for float as opposed to double) or an 'l' suffix (for long double). If
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockthe float variants are missing, _STLP_NO_VENDOR_MATH_F is defined, when the
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocklong double variants are missing, _STLP_NO_VENDOR_MATH_L is defined. Of course
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockthe latter doesn't make sense anyway when the compiler already has no long
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdouble support.
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve BlockThose two traits determine a) which overloads get defined and b) how they are
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdefined.
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve BlockMeaning of suffixes:
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block""   : function returning and taking a float_type
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block"2"  : function returning a float_type and taking to float_types
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block"2P" : function returning a float_type and taking a float_type and a float_type*
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block"2PI": function returning a float_type and taking a float_type and an int*
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block"2I" : function returning a float_type and taking a float_Type and an int
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block*/
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_LONG_DOUBLE) && !defined (_STLP_NO_VENDOR_MATH_L) && !defined (_STLP_NO_VENDOR_MATH_F)
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   // long double support and both e.g. sinl(long double) and sinf(float)
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   // This is the default for a correct and complete native library.
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DEF_MATH_INLINE(func,cf) \
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE(float,func,cf##f) \
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE_D(double,func,cf) \
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE(long double,func,cf##l)
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DEF_MATH_INLINE2(func,cf) \
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2(float,float,func,cf##f) \
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2_D(double,double,func,cf) \
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2(long double,long double,func,cf##l)
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DEF_MATH_INLINE2P(func,cf) \
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2(float,float *,func,cf##f) \
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2_D(double,double *,func,cf) \
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2(long double,long double *,func,cf##l)
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DEF_MATH_INLINE2PI(func,cf) \
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2(float,int *,func,cf##f) \
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2_D(double,int *,func,cf) \
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2(long double,int *,func,cf##l)
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DEF_MATH_INLINE2I(func,cf) \
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2(float,int,func,cf##f) \
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2_D(double,int,func,cf) \
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_MATH_INLINE2(long double,int,func,cf##l)
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (_STLP_NO_LONG_DOUBLE)
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if !defined (_STLP_NO_VENDOR_MATH_F)
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       // long double support and e.g. sinf(float) but not e.g. sinl(long double)
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE(func,cf) \
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE(float,func,cf##f) \
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINEX(long double,func,cf)
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2(func,cf) \
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(float,float,func,cf##f) \
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2XX(long double,func,cf)
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2P(func,cf) \
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(float,float *,func,cf##f) \
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2PX(long double,func,cf)
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2PI(func,cf) \
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(float,int *,func,cf##f) \
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(long double,int *,func,cf)
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2I(func,cf) \
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(float,int,func,cf##f) \
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(long double,int,func,cf)
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    elif !defined (_STLP_NO_VENDOR_MATH_L)
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       // long double support and e.g. sinl(long double) but not e.g. sinf(float)
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE(func,cf) \
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINEX(float,func,cf) \
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE(long double,func,cf##l)
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2(func,cf) \
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2XX(float,func,cf) \
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(long double,long double,func,cf##l)
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2P(func,cf) \
2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2PX(float,func,cf) \
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(long double,long double *,func,cf##l)
2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2PI(func,cf) \
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(float,int *,func,cf) \
2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(long double,int *,func,cf##l)
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2I(func,cf) \
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(float,int,func,cf) \
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(long double,int,func,cf##l)
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    else
2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE(func,cf) \
2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINEX(float,func,cf) \
2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINEX(long double,func,cf)
2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2(func,cf) \
2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2XX(float,func,cf) \
2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2XX(long double,func,cf)
2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2P(func,cf) \
2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2PX(float,func,cf) \
2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2PX(long double,func,cf)
2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2PI(func,cf) \
2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(float,int *,func,cf) \
2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(long double,int *,func,cf)
3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2I(func,cf) \
3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(float,int,func,cf) \
3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(long double,int,func,cf)
3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if !defined (_STLP_NO_VENDOR_MATH_F)
3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE(func,cf) \
3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE(float,func,cf##f)
3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2(func,cf) \
3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(float,float,func,cf##f)
3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2P(func,cf) \
3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(float,float *,func,cf##f)
3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2PI(func,cf) \
3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(float,int *,func,cf##f)
3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2I(func,cf) \
3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2(float,int,func,cf##f)
3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    else // _STLP_NO_VENDOR_MATH_F
3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       // neither long double support nor e.g. sinf(float) functions
3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE(func,cf) \
3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINEX(float,func,cf)
3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2(func,cf) \
3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2XX(float,func,cf)
3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2P(func,cf) \
3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2PX(float,func,cf)
3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2PI(func,cf) \
3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(float,int *,func,cf)
3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      define _STLP_DEF_MATH_INLINE2I(func,cf) \
3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_MATH_INLINE2X(float,int,func,cf)
3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif // _STLP_NO_VENDOR_MATH_F
3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_WCE) || \
3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   (defined(_STLP_MSVC) && (_STLP_MSVC <= 1300) && defined (_MSC_EXTENSIONS) /* && !defined(_STLP_WCE_NET) */)
3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * dums: VC6 has all the required C++ functions but only define them if
3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * _MSC_EXTENSIONS is not defined (a bug?). STLport just do the same
3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * thing also when _MSC_EXTENSIONS is defined.
3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * TODO: above check (_STLP_MSVC <= 1300) also catches VC7.0, is that intended?
3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//We have to tell the compilers that abs, acos ... math functions are not intrinsic
3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//otherwise we have Internal Compiler Error in release mode...
3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  pragma warning(push)
3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  pragma warning(disable: 4162) // no function with C linkage found
3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  pragma warning(disable: 4163) // not available as an intrinsic function
3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  pragma function (abs, acos, asin, atan, atan2, cos, cosh, exp, fabs, fmod, log, log10, sin, sinh, sqrt, tan, tanh)
3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_WCE)
3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    pragma function (ceil, floor)
3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_RESTORE_FUNCTION_INTRINSIC
3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif // _STLP_MSVC && _STLP_MSVC <= 1300 && !_STLP_WCE && _MSC_EXTENSIONS
3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if (defined (__BORLANDC__) || defined (__WATCOMC__)) && defined (_STLP_USE_NEW_C_HEADERS)
3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* In this config Borland native lib only define functions in std namespace.
3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * In order to have all overloads in STLport namespace we need to add the
3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * double overload in global namespace. We do not use a using statement to avoid
3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * import of invalid overload.
3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DMATH_INLINE(func) _STLP_MATH_INLINE(double, func, func)
3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define _STLP_DMATH_INLINE2(func) _STLP_MATH_INLINE2(double, double, func, func)
3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(acos)
3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(asin)
3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(atan)
3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE2(atan2)
3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(ceil)
3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(cos)
3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(cosh)
3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(exp)
3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(fabs)
3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(floor)
3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE2(fmod)
3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MATH_INLINE2X(double, int*, frexp, frexp)
3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MATH_INLINE2X(double, int, ldexp, ldexp)
3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(log)
3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(log10)
3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MATH_INLINE2PX(double, modf, modf)
3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(sin)
3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(sinh)
3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(sqrt)
3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(tan)
3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE(tanh)
3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE2(pow)
3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DMATH_INLINE2(hypot)
3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef _STLP_DMATH_INLINE
3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef _STLP_DMATH_INLINE2
3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (__DMC__)
3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (fabs)
3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double __stlp_fabs(double __x) { return fabs(__x); }
3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef fabs
3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double fabs(double __x) { return __stlp_fabs(__x); }
3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (cos)
3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double __stlp_cos(double __x) { return cos(__x); }
3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef cos
3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double cos(double __x) { return __stlp_cos(__x); }
3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (sin)
4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double __stlp_sin(double __x) { return sin(__x); }
4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef sin
4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double sin(double __x) { return __stlp_sin(__x); }
4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (sqrt)
4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double __stlp_sqrt(double __x) { return sqrt(__x); }
4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef sqrt
4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double sqrt(double __x) { return __stlp_sqrt(__x); }
4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (ldexp)
4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double __stlp_ldexp(double __x, int __y) { return ldexp(__x, __y); }
4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    undef ldexp
4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double ldexp(double __x, int __y) { return __stlp_ldexp(__x, __y); }
4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* MSVC native lib starting with .Net 2003 has already all math functions
4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * in global namespace.
4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * HP-UX native lib has math functions in the global namespace.
4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if (!defined (_STLP_MSVC_LIB) || (_STLP_MSVC_LIB < 1310) || defined(UNDER_CE)) && \
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    (!defined (__HP_aCC) || (__HP_aCC < 30000)) && \
423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    !defined (__WATCOMC__)
4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double abs(double __x)
4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return ::fabs(__x); }
4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined (__MVS__)
4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(abs, fabs)
4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else // __MVS__ has native long double abs?
4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline float abs(float __x) { return ::fabsf(__x); }
4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(acos, acos)
4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(asin, asin)
4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(atan, atan)
4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE2(atan2, atan2)
4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(ceil, ceil)
4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(cos, cos)
4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(cosh, cosh)
4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(exp, exp)
4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(fabs, fabs)
4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(floor, floor)
4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE2(fmod, fmod)
4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE2PI(frexp, frexp)
4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE2I(ldexp, ldexp)
4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(log, log)
4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(log10, log10)
4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE2P(modf, modf)
4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(sin, sin)
4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(sinh, sinh)
4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(sqrt, sqrt)
4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(tan, tan)
4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE(tanh, tanh)
4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE2(pow, pow)
4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if !defined(_STLP_MSVC) /* || (_STLP_MSVC > 1300) */ || defined(_STLP_WCE) || !defined (_MSC_EXTENSIONS) /* && !defined(_STLP_WCE_NET) */
4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    ifndef _STLP_NO_VENDOR_MATH_F
4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      ifndef __sun
4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline float pow(float __x, int __y) { return _STLP_CMATH_FUNC_NAMESPACE::powf(__x, __STATIC_CAST(float,__y)); }
4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      else
4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline float pow(float __x, int __y) { return ::__powf(__x, __STATIC_CAST(float,__y)); }
4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      endif
4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    else
4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline float pow(float __x, int __y) { return __STATIC_CAST(float, _STLP_CMATH_FUNC_NAMESPACE::pow(__x, __STATIC_CAST(float,__y))); }
4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double pow(double __x, int __y) { return _STLP_CMATH_FUNC_NAMESPACE::pow(__x, __STATIC_CAST(double,__y)); }
4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    if !defined (_STLP_NO_LONG_DOUBLE)
4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      if !defined(_STLP_NO_VENDOR_MATH_L)
4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        ifndef __sun
4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline long double pow(long double __x, int __y) { return _STLP_CMATH_FUNC_NAMESPACE::powl(__x, __STATIC_CAST(long double,__y)); }
4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        else
4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          ifndef __SUNPRO_CC
4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline long double pow(long double __x, int __y) { return ::__powl(__x, __STATIC_CAST(long double,__y)); }
4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          else
4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline long double pow(long double __x, int __y) { return _STLP_VENDOR_CSTD::__powl(__x, __STATIC_CAST(long double,__y)); }
4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#          endif
4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#        endif
4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      else
4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline long double pow(long double __x, int __y) { return __STATIC_CAST(long double, _STLP_CMATH_FUNC_NAMESPACE::pow(__x, __STATIC_CAST(long double,__y))); }
4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#      endif
4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    endif
4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//The MS native pow version has a bugged overload so it is not imported
4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//in the STLport namespace.
4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//Here is the bugged version:
4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//inline double pow(int __x, int __y)            { return (_Pow_int(__x, __y)); }
4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double      pow(double __x, int __y)      { return (_Pow_int(__x, __y)); }
4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline float       pow(float __x, int __y)       { return (_Pow_int(__x, __y)); }
4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline long double pow(long double __x, int __y) { return (_Pow_int(__x, __y)); }
4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if (defined (_STLP_MSVC) && !defined (_STLP_WCE)) || defined (__ICL) || defined (__sun)
4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_MSVC) && (_STLP_MSVC >= 1400)
4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    pragma warning (push)
4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    pragma warning (disable : 4996) // hypot is deprecated.
4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MATH_INLINE2XX(float, hypot, hypot)
4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline long double hypot(long double x, long double y) { return sqrt(x * x + y * y); }
4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_MSVC) && (_STLP_MSVC >= 1400)
5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    pragma warning (pop)
5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_USE_UCLIBC)
5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double hypot(double x, double y) { return sqrt(x * x + y * y); }
5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE2(hypot, hypot)
5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  elif defined (_STLP_WCE)
5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   /* CE has a double _hypot(double,double) which we use */
5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline double hypot(double __x, double __y) { return _hypot(__x,__y); }
5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEF_MATH_INLINE2(hypot, _hypot)
5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_RESTORE_FUNCTION_INTRINSIC)
5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//restoration of the default intrinsic status of those functions:
5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  pragma intrinsic (abs, acos, asin, atan, atan2, cos, cosh, exp, fabs, fmod, log, log10, sin, sinh, sqrt, tan, tanh)
5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_WCE)
5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#    pragma intrinsic (ceil, floor)
5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  pragma warning(pop)
5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef _STLP_RESTORE_FUNCTION_INTRINSIC
5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif // _STLP_MSVC && _STLP_MSVC <= 1300 && !_STLP_WCE && _MSC_EXTENSIONS
5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* C++ Standard is unclear about several call to 'using ::func' if new overloads
5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * of ::func appears between 2 successive 'using' calls. To avoid this potential
5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * problem we provide all abs overload before the 'using' call.
5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Beware: This header inclusion has to be after all abs overload of this file.
5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *         The first 'using ::abs' call is going to be in the other header.
5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CSTDLIB
5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_cstdlib.h>
5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_IMPORT_VENDOR_CSTD) && !defined (_STLP_NO_CSTD_FUNCTION_IMPORTS)
5347924895a54b8f0b67514224a7ad9d67c79b3eeafAndrew Hsieh#if defined (__ANDROID__)
535066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocknamespace __captured {
536066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocktemplate<typename _Tp> inline int __capture_isfinite(_Tp __f) { return isfinite(__f); }
537066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocktemplate<typename _Tp> inline int __capture_isinf(_Tp __f) { return isinf(__f); }
538066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocktemplate<typename _Tp> inline int __capture_isnan(_Tp __f) { return isnan(__f); }
539066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocktemplate<typename _Tp> inline int __capture_signbit(_Tp __f) { return signbit(__f); }
540066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Block}
541066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Block#undef isfinite
542066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Block#undef isinf
543066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Block#undef isnan
544066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Block#undef signbit
545066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocknamespace __captured {
546066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocktemplate<typename _Tp> inline int isfinite(_Tp __f) { return __capture_isfinite(__f); }
547066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocktemplate<typename _Tp> inline int isinf(_Tp __f) { return __capture_isinf(__f); }
548066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocktemplate<typename _Tp> inline int isnan(_Tp __f) { return __capture_isnan(__f); }
549066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blocktemplate<typename _Tp> inline int signbit(_Tp __f) { return __capture_signbit(__f); }
550066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Block}
551066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Block#endif
5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::abs;
5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::acos;
5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::asin;
5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::atan;
5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::atan2;
5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::ceil;
5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::cos;
5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::cosh;
5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::exp;
5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::fabs;
5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::floor;
5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::fmod;
5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::frexp;
566e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
567e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   Because of some weird interaction between STLport headers
568e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   and native HP-UX headers, when compiled with _STLP_DEBUG
569e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   macro defined with aC++, hypot() is not declared.
570e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   At some point we'll need to get to the bottom line of
571e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   this problem.
572e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott*/
573e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !(defined(__HP_aCC) && defined(_STLP_DEBUG))
5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::hypot;
575e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
5767924895a54b8f0b67514224a7ad9d67c79b3eeafAndrew Hsieh#if defined (__ANDROID__)
577066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blockusing __captured::isfinite;
578066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blockusing __captured::isinf;
579066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blockusing __captured::isnan;
580066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Block#endif
5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::ldexp;
5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::log;
5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::log10;
5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::modf;
5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::pow;
5867924895a54b8f0b67514224a7ad9d67c79b3eeafAndrew Hsieh#if defined (__ANDROID__)
587066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Blockusing __captured::signbit;
588066aeb14079c42b4db0e93b167b8eeaf5bc22fd5Steve Block#endif
5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::sin;
5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::sinh;
5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::sqrt;
5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::tan;
5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing ::tanh;
5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
595e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (__BORLANDC__) && (__BORLANDC__ >= 0x560) && !defined (__linux__)
5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_CSTD::_ecvt;
5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_CSTD::_fcvt;
5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_CMATH */
6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
6049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
606