migrated math functions in Awk and StdAwk
This commit is contained in:
		| @ -1,5 +1,5 @@ | ||||
| /* | ||||
|  * $Id: Awk.cpp 458 2011-05-13 04:06:55Z hyunghwan.chung $ | ||||
|  * $Id: Awk.cpp 460 2011-05-17 14:56:54Z hyunghwan.chung $ | ||||
|  *  | ||||
|     Copyright 2006-2011 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
| @ -1073,8 +1073,9 @@ int Awk::open () | ||||
| 	QSE_ASSERT (awk == QSE_NULL && functionMap == QSE_NULL); | ||||
|  | ||||
| 	qse_awk_prm_t prm; | ||||
| 	prm.pow     = pow; | ||||
| 	prm.sprintf = sprintf; | ||||
| 	memset (&prm, 0, QSE_SIZEOF(prm)); | ||||
| 	prm.sprintf  = sprintf; | ||||
| 	prm.math.pow = pow; | ||||
|  | ||||
| 	awk = qse_awk_open (this->getMmgr(), QSE_SIZEOF(xtn_t), &prm); | ||||
| 	if (awk == QSE_NULL) | ||||
| @ -1751,12 +1752,6 @@ int Awk::functionHandler (rtx_t* rtx, const cstr_t* name) | ||||
| 	rxtn_t* rxtn = (rxtn_t*) QSE_XTN (rtx); | ||||
| 	return rxtn->run->awk->dispatch_function (rxtn->run, name); | ||||
| }	 | ||||
|  | ||||
| Awk::real_t Awk::pow (awk_t* awk, real_t x, real_t y) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->pow (x, y); | ||||
| } | ||||
| 	 | ||||
| int Awk::sprintf (awk_t* awk, char_t* buf, size_t size, | ||||
|                   const char_t* fmt, ...) | ||||
| @ -1770,6 +1765,60 @@ int Awk::sprintf (awk_t* awk, char_t* buf, size_t size, | ||||
| 	return n; | ||||
| } | ||||
|  | ||||
| Awk::real_t Awk::pow (awk_t* awk, real_t x, real_t y) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->pow (x, y); | ||||
| } | ||||
|  | ||||
| Awk::real_t Awk::sin (awk_t* awk, real_t x) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->sin (x); | ||||
| } | ||||
|  | ||||
| Awk::real_t Awk::cos (awk_t* awk, real_t x) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->cos (x); | ||||
| } | ||||
|  | ||||
| Awk::real_t Awk::tan (awk_t* awk, real_t x) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->tan (x); | ||||
| } | ||||
|  | ||||
| Awk::real_t Awk::atan (awk_t* awk, real_t x) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->atan (x); | ||||
| } | ||||
|  | ||||
| Awk::real_t Awk::atan2 (awk_t* awk, real_t x, real_t y) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->atan2 (x, y); | ||||
| } | ||||
|  | ||||
| Awk::real_t Awk::log (awk_t* awk, real_t x) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->log (x); | ||||
| } | ||||
|  | ||||
| Awk::real_t Awk::exp (awk_t* awk, real_t x) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->exp (x); | ||||
| } | ||||
|  | ||||
| Awk::real_t Awk::sqrt (awk_t* awk, real_t x) | ||||
| { | ||||
| 	xtn_t* xtn = (xtn_t*) QSE_XTN (awk); | ||||
| 	return xtn->awk->sqrt (x); | ||||
| } | ||||
|  | ||||
| ///////////////////////////////// | ||||
| QSE_END_NAMESPACE(QSE) | ||||
| ///////////////////////////////// | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| /* | ||||
|  * $Id: StdAwk.cpp 441 2011-04-22 14:28:43Z hyunghwan.chung $ | ||||
|  * $Id: StdAwk.cpp 460 2011-05-17 14:56:54Z hyunghwan.chung $ | ||||
|  * | ||||
|     Copyright 2006-2011 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
| @ -56,14 +56,6 @@ int StdAwk::open () | ||||
| 	int n = Awk::open (); | ||||
| 	if (n == -1) return n; | ||||
|  | ||||
| 	ADDFNC (QSE_T("sin"),        1, 1, &StdAwk::sin); | ||||
| 	ADDFNC (QSE_T("cos"),        1, 1, &StdAwk::cos); | ||||
| 	ADDFNC (QSE_T("tan"),        1, 1, &StdAwk::tan); | ||||
| 	ADDFNC (QSE_T("atan"),       1, 1, &StdAwk::atan); | ||||
| 	ADDFNC (QSE_T("atan2"),      2, 2, &StdAwk::atan2); | ||||
| 	ADDFNC (QSE_T("log"),        1, 1, &StdAwk::log); | ||||
| 	ADDFNC (QSE_T("exp"),        1, 1, &StdAwk::exp); | ||||
| 	ADDFNC (QSE_T("sqrt"),       1, 1, &StdAwk::sqrt); | ||||
| 	ADDFNC (QSE_T("int"),        1, 1, &StdAwk::fnint); | ||||
| 	ADDFNC (QSE_T("rand"),       0, 0, &StdAwk::rand); | ||||
| 	ADDFNC (QSE_T("srand"),      0, 1, &StdAwk::srand); | ||||
| @ -84,134 +76,6 @@ void StdAwk::close () | ||||
| 	Awk::close (); | ||||
| } | ||||
|  | ||||
| int StdAwk::sin (Run& run, Value& ret, const Value* args, size_t nargs,  | ||||
| 	const char_t* name, size_t len) | ||||
| { | ||||
| 	return ret.setReal ( | ||||
| 	#if defined(HAVE_SINL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 		(real_t)::sinl(args[0].toReal()) | ||||
| 	#elif defined(HAVE_SIN) | ||||
| 		(real_t)::sin(args[0].toReal()) | ||||
| 	#elif defined(HAVE_SINF) | ||||
| 		(real_t)::sinf(args[0].toReal()) | ||||
| 	#else | ||||
| 		#error ### no sin function available ### | ||||
| 	#endif | ||||
| 	); | ||||
| } | ||||
|  | ||||
| int StdAwk::cos (Run& run, Value& ret, const Value* args, size_t nargs, | ||||
| 	const char_t* name, size_t len) | ||||
| { | ||||
| 	return ret.setReal ( | ||||
| 	#if defined(HAVE_COSL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 		(real_t)::cosl(args[0].toReal()) | ||||
| 	#elif defined(HAVE_COS) | ||||
| 		(real_t)::cos(args[0].toReal()) | ||||
| 	#elif defined(HAVE_COSF) | ||||
| 		(real_t)::cosf(args[0].toReal()) | ||||
| 	#else | ||||
| 		#error ### no cos function available ### | ||||
| 	#endif | ||||
| 	); | ||||
| } | ||||
|  | ||||
| int StdAwk::tan (Run& run, Value& ret, const Value* args, size_t nargs, | ||||
| 	const char_t* name, size_t len) | ||||
| { | ||||
| 	return ret.setReal ( | ||||
| 	#if defined(HAVE_TANL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 		(real_t)::tanl(args[0].toReal()) | ||||
| 	#elif defined(HAVE_TAN) | ||||
| 		(real_t)::tan(args[0].toReal()) | ||||
| 	#elif defined(HAVE_TANF) | ||||
| 		(real_t)::tanf(args[0].toReal()) | ||||
| 	#else | ||||
| 		#error ### no tan function available ### | ||||
| 	#endif | ||||
| 	); | ||||
| } | ||||
|  | ||||
| int StdAwk::atan (Run& run, Value& ret, const Value* args, size_t nargs, | ||||
| 	const char_t* name, size_t len) | ||||
| { | ||||
| 	return ret.setReal ( | ||||
| 	#if defined(HAVE_ATANL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 		(real_t)::atanl(args[0].toReal()) | ||||
| 	#elif defined(HAVE_ATAN) | ||||
| 		(real_t)::atan(args[0].toReal()) | ||||
| 	#elif defined(HAVE_ATANF) | ||||
| 		(real_t)::atanf(args[0].toReal()) | ||||
| 	#else | ||||
| 		#error ### no atan function available ### | ||||
| 	#endif | ||||
| 	); | ||||
| } | ||||
|  | ||||
| int StdAwk::atan2 (Run& run, Value& ret, const Value* args, size_t nargs, | ||||
| 	const char_t* name, size_t len) | ||||
| { | ||||
| 	return ret.setReal ( | ||||
| 	#if defined(HAVE_ATAN2L) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 		(real_t)::atan2l(args[0].toReal(), args[1].toReal()) | ||||
| 	#elif defined(HAVE_ATAN2) | ||||
| 		(real_t)::atan2(args[0].toReal(), args[1].toReal()) | ||||
| 	#elif defined(HAVE_ATAN2F) | ||||
| 		(real_t)::atan2f(args[0].toReal(), args[1].toReal()) | ||||
| 	#else | ||||
| 		#error ### no atan2 function available ### | ||||
| 	#endif | ||||
| 	); | ||||
| } | ||||
|  | ||||
| int StdAwk::log (Run& run, Value& ret, const Value* args, size_t nargs, | ||||
| 	const char_t* name, size_t len) | ||||
| { | ||||
| 	return ret.setReal ( | ||||
| 	#if defined(HAVE_LOGL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 		(real_t)::logl(args[0].toReal()) | ||||
| 	#elif defined(HAVE_LOG) | ||||
| 		(real_t)::log(args[0].toReal()) | ||||
| 	#elif defined(HAVE_LOGF) | ||||
| 		(real_t)::logf(args[0].toReal()) | ||||
| 	#else | ||||
| 		#error ### no log function available ### | ||||
| 	#endif | ||||
| 	); | ||||
| } | ||||
|  | ||||
| int StdAwk::exp (Run& run, Value& ret, const Value* args, size_t nargs, | ||||
| 	const char_t* name, size_t len) | ||||
| { | ||||
| 	return ret.setReal ( | ||||
| 	#if defined(HAVE_EXPL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 		(real_t)::expl(args[0].toReal()) | ||||
| 	#elif defined(HAVE_EXP) | ||||
| 		(real_t)::exp(args[0].toReal()) | ||||
| 	#elif defined(HAVE_EXPF) | ||||
| 		(real_t)::expf(args[0].toReal()) | ||||
| 	#else | ||||
| 		#error ### no exp function available ### | ||||
| 	#endif | ||||
| 	); | ||||
| } | ||||
|  | ||||
| int StdAwk::sqrt (Run& run, Value& ret, const Value* args, size_t nargs, | ||||
| 	const char_t* name, size_t len) | ||||
| { | ||||
| 	return ret.setReal ( | ||||
| 	#if defined(HAVE_SQRTL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 		(real_t)::sqrtl(args[0].toReal()) | ||||
| 	#elif defined(HAVE_SQRT) | ||||
| 		(real_t)::sqrt(args[0].toReal()) | ||||
| 	#elif defined(HAVE_SQRTF) | ||||
| 		(real_t)::sqrtf(args[0].toReal()) | ||||
| 	#else | ||||
| 		#error ### no sqrt function available ### | ||||
| 	#endif | ||||
| 	); | ||||
| } | ||||
|  | ||||
| int StdAwk::fnint (Run& run, Value& ret, const Value* args, size_t nargs, | ||||
| 	const char_t* name, size_t len) | ||||
| { | ||||
| @ -783,17 +647,129 @@ void  StdAwk::freeMem (void* ptr) | ||||
| } | ||||
|  | ||||
| // miscellaneous primitive | ||||
| StdAwk::real_t StdAwk::pow (real_t x, real_t y)  | ||||
| {  | ||||
| 	return ::pow (x, y);  | ||||
| } | ||||
|  | ||||
| int StdAwk::vsprintf ( | ||||
| 	char_t* buf, size_t size, const char_t* fmt, va_list arg)  | ||||
| { | ||||
| 	return qse_vsprintf (buf, size, fmt, arg); | ||||
| } | ||||
|  | ||||
| StdAwk::real_t StdAwk::pow (real_t x, real_t y)  | ||||
| {  | ||||
| #if defined(HAVE_POWL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return ::powl (x, y); | ||||
| #elif defined(HAVE_POW) | ||||
| 	return ::pow (x, y); | ||||
| #elif defined(HAVE_POWF) | ||||
| 	return ::powf (x, y); | ||||
| #else | ||||
| 	#error ### no pow function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| StdAwk::real_t StdAwk::sin (real_t x) | ||||
| {  | ||||
| #if defined(HAVE_SINL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return ::sinl (x); | ||||
| #elif defined(HAVE_SIN) | ||||
| 	return ::sin (x); | ||||
| #elif defined(HAVE_SINF) | ||||
| 	return ::sinf (x); | ||||
| #else | ||||
| 	#error ### no sin function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| StdAwk::real_t StdAwk::cos (real_t x) | ||||
| {  | ||||
| #if defined(HAVE_COSL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return ::cosl (x); | ||||
| #elif defined(HAVE_COS) | ||||
| 	return ::cos (x); | ||||
| #elif defined(HAVE_COSF) | ||||
| 	return ::cosf (x); | ||||
| #else | ||||
| 	#error ### no cos function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| StdAwk::real_t StdAwk::tan (real_t x) | ||||
| {  | ||||
| #if defined(HAVE_TANL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return ::tanl (x); | ||||
| #elif defined(HAVE_TAN) | ||||
| 	return ::tan (x); | ||||
| #elif defined(HAVE_TANF) | ||||
| 	return ::tanf (x); | ||||
| #else | ||||
| 	#error ### no tan function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| StdAwk::real_t StdAwk::atan (real_t x) | ||||
| {  | ||||
| #if defined(HAVE_ATANL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return ::atanl (x); | ||||
| #elif defined(HAVE_ATAN) | ||||
| 	return ::atan (x); | ||||
| #elif defined(HAVE_ATANF) | ||||
| 	return ::atanf (x); | ||||
| #else | ||||
| 	#error ### no atan function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| StdAwk::real_t StdAwk::atan2 (real_t x, real_t y)  | ||||
| {  | ||||
| #if defined(HAVE_ATAN2L) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return ::atan2l (x, y); | ||||
| #elif defined(HAVE_ATAN2) | ||||
| 	return ::atan2 (x, y); | ||||
| #elif defined(HAVE_ATAN2F) | ||||
| 	return ::atan2f (x, y); | ||||
| #else | ||||
| 	#error ### no atan2 function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| StdAwk::real_t StdAwk::log (real_t x) | ||||
| {  | ||||
| #if defined(HAVE_LOGL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return ::logl (x); | ||||
| #elif defined(HAVE_LOG) | ||||
| 	return ::log (x); | ||||
| #elif defined(HAVE_LOGF) | ||||
| 	return ::logf (x); | ||||
| #else | ||||
| 	#error ### no log function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| StdAwk::real_t StdAwk::exp (real_t x) | ||||
| {  | ||||
| #if defined(HAVE_EXPL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return ::expl (x); | ||||
| #elif defined(HAVE_EXP) | ||||
| 	return ::exp (x); | ||||
| #elif defined(HAVE_EXPF) | ||||
| 	return ::expf (x); | ||||
| #else | ||||
| 	#error ### no exp function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| StdAwk::real_t StdAwk::sqrt (real_t x) | ||||
| {  | ||||
| #if defined(HAVE_SQRTL) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return ::sqrtl (x); | ||||
| #elif defined(HAVE_SQRT) | ||||
| 	return ::sqrt (x); | ||||
| #elif defined(HAVE_SQRTF) | ||||
| 	return ::sqrtf (x); | ||||
| #else | ||||
| 	#error ### no sqrt function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| int StdAwk::SourceFile::open (Data& io) | ||||
| { | ||||
| 	qse_sio_t* sio; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user