diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-10-01 12:15:04 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-10-01 12:33:11 +0100 |
commit | 9b2a24b9e32ded1b6dc111ddc06b7ed07c0b7d6d (patch) | |
tree | 18722d748156f6ab0fe55919317be45a9a586187 | |
parent | dc41255dc725dfa912326cc5d9e420bd66471c64 (diff) |
rearrange SwCalc a little
Change-Id: I42278cf63f3cf2a1c3362fcb8c4eeacab2a9de48
-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(); |