diff --git a/src/musredit_qt5/mupp/var/include/PAst.hpp b/src/musredit_qt5/mupp/var/include/PAst.hpp index c2afa127..45c69115 100644 --- a/src/musredit_qt5/mupp/var/include/PAst.hpp +++ b/src/musredit_qt5/mupp/var/include/PAst.hpp @@ -70,9 +70,16 @@ namespace mupp { namespace ast fun_sin, fun_cos, fun_tan, + fun_sinh, + fun_cosh, + fun_tanh, + fun_asin, + fun_acos, + fun_atan, fun_exp, fun_log, - fun_ln + fun_ln, + fun_sqrt }; struct nil {}; diff --git a/src/musredit_qt5/mupp/var/include/PExpressionDef.hpp b/src/musredit_qt5/mupp/var/include/PExpressionDef.hpp index 13981692..125df780 100644 --- a/src/musredit_qt5/mupp/var/include/PExpressionDef.hpp +++ b/src/musredit_qt5/mupp/var/include/PExpressionDef.hpp @@ -86,9 +86,16 @@ namespace mupp { namespace parser ("sin", ast::fun_sin) ("cos", ast::fun_cos) ("tan", ast::fun_tan) + ("sinh", ast::fun_sinh) + ("cosh", ast::fun_cosh) + ("tanh", ast::fun_tanh) + ("asin", ast::fun_asin) + ("acos", ast::fun_acos) + ("atan", ast::fun_atan) ("exp", ast::fun_exp) ("log", ast::fun_log) ("ln", ast::fun_ln) + ("sqrt", ast::fun_sqrt) ; /////////////////////////////////////////////////////////////////////// diff --git a/src/musredit_qt5/mupp/var/src/PProgram.cpp b/src/musredit_qt5/mupp/var/src/PProgram.cpp index fac4a014..290761d4 100644 --- a/src/musredit_qt5/mupp/var/src/PProgram.cpp +++ b/src/musredit_qt5/mupp/var/src/PProgram.cpp @@ -102,9 +102,16 @@ namespace mupp { namespace prog { case ast::fun_sin: case ast::fun_cos: case ast::fun_tan: + case ast::fun_sinh: + case ast::fun_cosh: + case ast::fun_tanh: + case ast::fun_asin: + case ast::fun_acos: + case ast::fun_atan: case ast::fun_exp: case ast::fun_log: case ast::fun_ln: + case ast::fun_sqrt: break; default: BOOST_ASSERT(0); @@ -412,6 +419,30 @@ namespace mupp { namespace prog { for (unsigned int i=0; i<vec.size(); i++) vec[i] = tan(vec[i]); break; + case ast::fun_sinh: + for (unsigned int i=0; i<vec.size(); i++) + vec[i] = sinh(vec[i]); + break; + case ast::fun_cosh: + for (unsigned int i=0; i<vec.size(); i++) + vec[i] = cosh(vec[i]); + break; + case ast::fun_tanh: + for (unsigned int i=0; i<vec.size(); i++) + vec[i] = tanh(vec[i]); + break; + case ast::fun_asin: + for (unsigned int i=0; i<vec.size(); i++) + vec[i] = asin(vec[i]); + break; + case ast::fun_acos: + for (unsigned int i=0; i<vec.size(); i++) + vec[i] = acos(vec[i]); + break; + case ast::fun_atan: + for (unsigned int i=0; i<vec.size(); i++) + vec[i] = atan(vec[i]); + break; case ast::fun_exp: for (unsigned int i=0; i<vec.size(); i++) vec[i] = exp(vec[i]); @@ -436,6 +467,16 @@ namespace mupp { namespace prog { } } break; + case ast::fun_sqrt: + for (unsigned int i=0; i<vec.size(); i++) { + if (vec[i] <= 0.0) { + BOOST_ASSERT(0); + break; + } else { + vec[i] = sqrt(vec[i]); + } + } + break; default: BOOST_ASSERT(0); break;