/*	Copyright (C) 2006 Garrett A. Kajmowicz

	This file is part of the uClibc++ Library.

	This library is free software; you can redistribute it and/or
	modify it under the terms of the GNU Lesser General Public
	License as published by the Free Software Foundation; either
	version 2.1 of the License, or (at your option) any later version.

	This library is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
	Lesser General Public License for more details.

	You should have received a copy of the GNU Lesser General Public
	License along with this library; if not, write to the Free Software
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

#include <math.h>

#ifndef __STD_HEADER_CMATH
#define __STD_HEADER_CMATH 1

#undef abs
#undef acos
#undef asin
#undef atan
#undef atan2
#undef ceil
#undef cos
#undef cosh
#undef exp
#undef fabs
#undef floor
#undef fmod
#undef frexp
#undef ldexp
#undef log
#undef log10
#undef modf
#undef pow
#undef sin
#undef sinh
#undef sqrt
#undef tan
#undef tanh

namespace std {

	using ::acos;
	using ::asin;
	using ::atan;
	using ::atan2;
	using ::ceil;
	using ::cos;
	using ::cosh;
	using ::exp;
	using ::fabs;
	using ::floor;
	using ::fmod;
	using ::frexp;
	using ::ldexp;
	using ::log;
	using ::log10;
	using ::modf;
	using ::pow;
	using ::sin;
	using ::sinh;
	using ::sqrt;
	using ::tan;
	using ::tanh;

#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
	inline float abs  (float x){
		return fabsf(x);
	}
	inline float acos (float x){
		return acosf(x);
	}
	inline float asin (float x){
		return asinf(x);
	}
	inline float atan (float x){
		return atanf(x);
	}
	inline float atan2(float y, float x){
		return atan2f(y, x);
	}
	inline float ceil (float x){
		return ceilf(x);
	}
	inline float cos  (float x){
		return cosf(x);
	}
	inline float cosh (float x){
		return coshf(x);
	}
	inline float exp  (float x){
		return expf(x);
	}
	inline float fabs (float x){
		return fabsf(x);
	}
	inline float floor(float x){
		return floorf(x);
	}
	inline float fmod (float x, float y){
		return fmodf(x, y);
	}
	inline float frexp(float x, int* exp){
		return frexpf(x, exp);
	}
	inline float ldexp(float x, int exp){
		return ldexpf(x, exp);
	}
	inline float log  (float x){
		return logf(x);
	}
	inline float log10(float x){
		return log10f(x);
	}
	inline float modf (float x, float* inptr){
		return modff(x, inptr);
	}
	inline float pow  (float x, float y){
		return powf(x, y);
	}
#if 1 // DR 550 removed this
	inline float pow  (float x, int y){
		return pow((double)x, (double)y);
	}
#endif
	inline float sin  (float x){
		return sinf(x);
	}
	inline float sinh (float x){
		return sinhf(x);
	}
	inline float sqrt (float x){
		return sqrtf(x);
	}
	inline float tan  (float x){
		return tanf(x);
	}
	inline float tanh (float x){
		return tanhf(x);
	}
	inline double abs(double x){
		return fabs(x);
	}
	inline double pow(double x, int y){
		return pow((double)x, (double)y);
	}

# ifdef __UCLIBCXX_HAS_LONG_DOUBLE__
	inline long double abs  (long double x){
		return fabsl(x);
	}
	inline long double acos (long double x){
		return acosl(x);
	}
	inline long double asin (long double x){
		return asinl(x);
	}
	inline long double atan (long double x){
		return atanl(x);
	}
	inline long double atan2(long double y, long double x){
		return atan2l(y, x);
	}
	inline long double ceil (long double x){
		return ceill(x);
	}
	inline long double cos  (long double x){
		return cosl(x);
	}
	inline long double cosh (long double x){
		return coshl(x);
	}
	inline long double exp  (long double x){
		return expl(x);
	}
	inline long double fabs (long double x){
		return fabsl(x);
	}
	inline long double floor(long double x){
		return floorl(x);
	}
	inline long double frexp(long double x, int* exp){
		return frexpl(x, exp);
	}
	inline long double fmod (long double x, long double y){
		return fmodl(x, y);
	}
	inline long double ldexp(long double x, int y){
		return ldexpl(x, y);
	}
	inline long double log  (long double x){
		return logl(x);
	}
	inline long double log10(long double x){
		return log10l(x);
	}
	inline long double modf (long double x, long double* iptr){
		return modfl(x, iptr);
	}
	inline long double pow  (long double x, long double y){
		return powl(x, y);
	}
	inline long double pow  (long double x, int y){
		return powl(x, (long double)y );
	}
	inline long double sin  (long double x){
		return sinl(x);
	}
	inline long double sinh (long double x){
		return sinhl(x);
	}
	inline long double sqrt (long double x){
		return sqrtl(x);
	}
	inline long double tan  (long double x){
		return tanl(x);
	}
	inline long double tanh (long double x){
		return tanhl(x);
	}
# endif	//	 __UCLIBCXX_HAS_LONG_DOUBLE__
#endif	//	 __CORRECT_ISO_CPP_MATH_H_PROTO
}

#endif	//__STD_HEADER_CMATH

