diff options
-rw-r--r-- | sw/inc/calc.hxx | 3 | ||||
-rw-r--r-- | sw/source/core/bastyp/calc.cxx | 40 |
2 files changed, 21 insertions, 22 deletions
diff --git a/sw/inc/calc.hxx b/sw/inc/calc.hxx index 4610eaff6023..20f990191d11 100644 --- a/sw/inc/calc.hxx +++ b/sw/inc/calc.hxx @@ -148,6 +148,8 @@ void DeleteHashTable( SwHash** ppTable, sal_uInt16 nTableSize ); struct CalcOp; CalcOp* FindOperator( const OUString& rSearch ); +extern "C" typedef double (*pfCalc)(double); + class SwCalc { SwHash* m_aVarTable[ TBLSZ ]; @@ -173,6 +175,7 @@ class SwCalc SwSbxValue Expr(); SwSbxValue Term(); SwSbxValue Prim(); + SwSbxValue StdFunc(pfCalc pFnc, bool bChkTrig); static OUString GetColumnName( const OUString& rName ); OUString GetDBName( const OUString& rName ); diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx index 6d8faa53f73b..2f2e42f50a82 100644 --- a/sw/source/core/bastyp/calc.cxx +++ b/sw/source/core/bastyp/calc.cxx @@ -1030,37 +1030,43 @@ SwSbxValue SwCalc::Term() } } -extern "C" typedef double (*pfCalc)( double ); +SwSbxValue SwCalc::StdFunc(pfCalc pFnc, bool bChkTrig) +{ + SwSbxValue nErg; + GetToken(); + double nVal = Prim().GetDouble(); + if( !bChkTrig || ( nVal > -1 && nVal < 1 ) ) + nErg.PutDouble( (*pFnc)( nVal ) ); + else + m_eError = CALC_OVERFLOW; + return nErg; +} SwSbxValue SwCalc::Prim() { SwSbxValue nErg; - pfCalc pFnc = nullptr; - - bool bChkTrig = false, bChkPow = false; + bool bChkPow = false; switch (m_eCurrOper) { case CALC_SIN: - pFnc = &sin; + nErg = StdFunc(&sin, false); break; case CALC_COS: - pFnc = &cos; + nErg = StdFunc(&cos, false); break; case CALC_TAN: - pFnc = &tan; + nErg = StdFunc(&tan, false); break; case CALC_ATAN: - pFnc = &atan; + nErg = StdFunc(&atan, false); break; case CALC_ASIN: - pFnc = &asin; - bChkTrig = true; + nErg = StdFunc(&asin, true); break; case CALC_ACOS: - pFnc = &acos; - bChkTrig = true; + nErg = StdFunc(&acos, true); break; case CALC_NOT: { @@ -1185,16 +1191,6 @@ SwSbxValue SwCalc::Prim() break; } - if( pFnc ) - { - GetToken(); - double nVal = Prim().GetDouble(); - if( !bChkTrig || ( nVal > -1 && nVal < 1 ) ) - nErg.PutDouble( (*pFnc)( nVal ) ); - else - m_eError = CALC_OVERFLOW; - } - if( bChkPow && m_eCurrOper == CALC_POW ) { double dleft = nErg.GetDouble(); |