summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/inc/calc.hxx3
-rw-r--r--sw/source/core/bastyp/calc.cxx40
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();