[Libreoffice-commits] core.git: 2 commits - sw/inc sw/source

Caolán McNamara caolanm at redhat.com
Sat Oct 1 11:36:16 UTC 2016


 sw/inc/calc.hxx                |    4 +
 sw/source/core/bastyp/calc.cxx |   85 +++++++++++++++++++++++++----------------
 2 files changed, 57 insertions(+), 32 deletions(-)

New commits:
commit a77223b281d79db60c6905e77538f077200b1af8
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sat Oct 1 12:23:46 2016 +0100

    rearrange SwCalc some more
    
    Change-Id: Ib1ffc112ddd006102b29536f7433a3f16bf63a3f

diff --git a/sw/inc/calc.hxx b/sw/inc/calc.hxx
index 20f9901..8389861 100644
--- a/sw/inc/calc.hxx
+++ b/sw/inc/calc.hxx
@@ -174,6 +174,7 @@ class SwCalc
     SwCalcOper  GetToken();
     SwSbxValue  Expr();
     SwSbxValue  Term();
+    SwSbxValue  PrimFunc(bool &rChkPow);
     SwSbxValue  Prim();
     SwSbxValue  StdFunc(pfCalc pFnc, bool bChkTrig);
 
diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx
index 2f2e42f..c7bdf9f 100644
--- a/sw/source/core/bastyp/calc.cxx
+++ b/sw/source/core/bastyp/calc.cxx
@@ -1042,36 +1042,34 @@ SwSbxValue SwCalc::StdFunc(pfCalc pFnc, bool bChkTrig)
     return nErg;
 }
 
-SwSbxValue SwCalc::Prim()
+SwSbxValue SwCalc::PrimFunc(bool &rChkPow)
 {
-    SwSbxValue nErg;
-
-    bool bChkPow = false;
+    rChkPow = false;
 
     switch (m_eCurrOper)
     {
         case CALC_SIN:
-            nErg = StdFunc(&sin, false);
+            return StdFunc(&sin, false);
             break;
         case CALC_COS:
-            nErg = StdFunc(&cos, false);
+            return StdFunc(&cos, false);
             break;
         case CALC_TAN:
-            nErg = StdFunc(&tan, false);
+            return StdFunc(&tan, false);
             break;
         case CALC_ATAN:
-            nErg = StdFunc(&atan, false);
+            return StdFunc(&atan, false);
             break;
         case CALC_ASIN:
-            nErg = StdFunc(&asin, true);
+            return StdFunc(&asin, true);
             break;
         case CALC_ACOS:
-            nErg = StdFunc(&acos, true);
+            return StdFunc(&acos, true);
             break;
         case CALC_NOT:
         {
             GetToken();
-            nErg = Prim();
+            SwSbxValue nErg = Prim();
             if( SbxSTRING == nErg.GetType() )
             {
                 nErg.PutBool( nErg.GetOUString().isEmpty() );
@@ -1092,10 +1090,12 @@ SwSbxValue SwCalc::Prim()
                 //!! computes a binary NOT
                 nErg.Compute( SbxNOT, nErg );
             }
+            return nErg;
             break;
         }
         case CALC_NUMBER:
         {
+            SwSbxValue nErg;
             if( GetToken() == CALC_PHD )
             {
                 double aTmp = m_nNumberValue.GetDouble();
@@ -1110,12 +1110,14 @@ SwSbxValue SwCalc::Prim()
             else
             {
                 nErg = m_nNumberValue;
-                bChkPow = true;
+                rChkPow = true;
             }
+            return nErg;
             break;
         }
         case CALC_NAME:
         {
+            SwSbxValue nErg;
             switch(SwCalcOper eOper = GetToken())
             {
                 case CALC_ASSIGN:
@@ -1132,19 +1134,24 @@ SwSbxValue SwCalc::Prim()
                     if (nErg.IsVoidValue() && (eOper == CALC_LP))
                         m_eError = CALC_SYNTAX;
                     else
-                        bChkPow = true;
+                        rChkPow = true;
                     break;
             }
+            return nErg;
             break;
         }
         case CALC_MINUS:
+        {
+            SwSbxValue nErg;
             GetToken();
             nErg.PutDouble( -(Prim().GetDouble()) );
+            return nErg;
             break;
+        }
         case CALC_LP:
         {
             GetToken();
-            nErg = Expr();
+            SwSbxValue nErg = Expr();
             if( m_eCurrOper != CALC_RP )
             {
                 m_eError = CALC_BRACK;
@@ -1152,46 +1159,64 @@ SwSbxValue SwCalc::Prim()
             else
             {
                 GetToken();
-                bChkPow = true; // in order for =(7)^2 to work
+                rChkPow = true; // in order for =(7)^2 to work
             }
+            return nErg;
             break;
         }
         case CALC_MEAN:
         {
             m_nListPor = 1;
             GetToken();
-            nErg = Expr();
+            SwSbxValue nErg = Expr();
             double aTmp = nErg.GetDouble();
             aTmp /= m_nListPor;
             nErg.PutDouble( aTmp );
+            return nErg;
             break;
         }
         case CALC_SQRT:
         {
             GetToken();
-            nErg = Prim();
+            SwSbxValue nErg = Prim();
             if( nErg.GetDouble() < 0 )
                 m_eError = CALC_OVERFLOW;
             else
                 nErg.PutDouble( sqrt( nErg.GetDouble() ));
+            return nErg;
             break;
         }
         case CALC_SUM:
         case CALC_DATE:
         case CALC_MIN:
         case CALC_MAX:
+        {
             GetToken();
-            nErg = Expr();
+            SwSbxValue nErg = Expr();
+            return nErg;
             break;
+        }
         case CALC_ENDCALC:
+        {
+            SwSbxValue nErg;
             nErg.Clear();
+            return nErg;
             break;
+        }
         default:
             m_eError = CALC_SYNTAX;
             break;
     }
 
-    if( bChkPow && m_eCurrOper == CALC_POW )
+    return SwSbxValue();
+}
+
+SwSbxValue SwCalc::Prim()
+{
+    bool bChkPow;
+    SwSbxValue nErg = PrimFunc(bChkPow);
+
+    if (bChkPow && m_eCurrOper == CALC_POW)
     {
         double dleft = nErg.GetDouble();
         GetToken();
commit 9b2a24b9e32ded1b6dc111ddc06b7ed07c0b7d6d
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sat Oct 1 12:15:04 2016 +0100

    rearrange SwCalc a little
    
    Change-Id: I42278cf63f3cf2a1c3362fcb8c4eeacab2a9de48

diff --git a/sw/inc/calc.hxx b/sw/inc/calc.hxx
index 4610eaf..20f9901 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 6d8faa5..2f2e42f 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();


More information about the Libreoffice-commits mailing list