sc/inc/dociter.hxx               |    6 ++----
 sc/qa/unit/ucalc.cxx             |    4 +++-
 sc/source/core/data/dociter.cxx  |    8 ++++----
 sc/source/core/tool/interpr1.cxx |   16 +++++++---------
 sc/source/core/tool/interpr2.cxx |    4 ++--
 sc/source/core/tool/interpr3.cxx |   17 ++++++++---------
 sc/source/core/tool/interpr5.cxx |    4 ++--
 sc/source/core/tool/interpr6.cxx |    3 +--
 8 files changed, 29 insertions(+), 33 deletions(-)

New commits:
commit 3be1cdce9d92cbadca1b276b3193c727032ea717
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Thu Sep 8 10:26:01 2022 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Fri Sep 9 20:55:43 2022 +0200

    always pass ScInterpreterContext to ScValueIterator
    
    its available at every call site
    
    Change-Id: I764962d1d2330c414e02ed215b4a0c5be2979145
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139637
    Tested-by: Caolán McNamara <caol...@redhat.com>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sc/inc/dociter.hxx b/sc/inc/dociter.hxx
index ff58a4181e12..55a2040f1d1b 100644
--- a/sc/inc/dociter.hxx
+++ b/sc/inc/dociter.hxx
@@ -53,7 +53,7 @@ class ScValueIterator            // walk through all values 
in an area
     typedef sc::CellStoreType::const_position_type PositionType;
 
     ScDocument&     mrDoc;
-    ScInterpreterContext* pContext;
+    ScInterpreterContext& mrContext;
     const ScAttrArray*  pAttrArray;
     sal_uInt32      nNumFormat;     // for CalcAsShown
     sal_uInt32      nNumFmtIndex;
@@ -83,7 +83,7 @@ class ScValueIterator            // walk through all values 
in an area
 
 public:
 
-    ScValueIterator(
+    ScValueIterator(ScInterpreterContext& rContext,
         ScDocument& rDocument, const ScRange& rRange, SubtotalFlags 
nSubTotalFlags = SubtotalFlags::NONE,
         bool bTextAsZero = false );
 
@@ -94,8 +94,6 @@ public:
 
     /// Does NOT reset rValue if no value found!
     bool GetNext( double& rValue, FormulaError& rErr );
-
-    void SetInterpreterContext( ScInterpreterContext* context ) { pContext = 
context; }
 };
 
 class ScDBQueryDataIterator
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 03cd8adfdbc8..0b21003a56c8 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -1336,6 +1336,8 @@ void Test::testValueIterator()
     aOpt.SetCalcAsShown(true);
     m_pDoc->SetDocOptions(aOpt);
 
+    ScInterpreterContext aContext(*m_pDoc, m_pDoc->GetFormatTable());
+
     // Purely horizontal data layout with numeric data.
     for (SCCOL i = 1; i <= 3; ++i)
         m_pDoc->SetValue(ScAddress(i,2,0), i);
@@ -1343,7 +1345,7 @@ void Test::testValueIterator()
     {
         const double aChecks[] = { 1.0, 2.0, 3.0 };
         size_t const nCheckLen = SAL_N_ELEMENTS(aChecks);
-        ScValueIterator aIter(*m_pDoc, ScRange(1,2,0,3,2,0));
+        ScValueIterator aIter(aContext, *m_pDoc, ScRange(1,2,0,3,2,0));
         bool bHas = false;
         size_t nCheckPos = 0;
         double fVal;
diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx
index 2c64a22e9011..97d40d82fd98 100644
--- a/sc/source/core/data/dociter.cxx
+++ b/sc/source/core/data/dociter.cxx
@@ -82,10 +82,10 @@ static void ScAttrArray_IterGetNumberFormat( sal_uInt32& 
nFormat, const ScAttrAr
     nAttrEndRow = nRowEnd;
 }
 
-ScValueIterator::ScValueIterator( ScDocument& rDocument, const ScRange& rRange,
+ScValueIterator::ScValueIterator(ScInterpreterContext& rContext, ScDocument& 
rDocument, const ScRange& rRange,
             SubtotalFlags nSubTotalFlags, bool bTextZero )
     : mrDoc(rDocument)
-    , pContext(nullptr)
+    , mrContext(rContext)
     , pAttrArray(nullptr)
     , nNumFormat(0) // Initialized in GetNumberFormat
     , nNumFmtIndex(0)
@@ -194,8 +194,8 @@ bool ScValueIterator::GetThis(double& rValue, FormulaError& 
rErr)
                 if (bCalcAsShown)
                 {
                     ScAttrArray_IterGetNumberFormat(nNumFormat, pAttrArray,
-                        nAttrEndRow, pCol->pAttrArray.get(), nCurRow, mrDoc, 
pContext);
-                    rValue = mrDoc.RoundValueAsShown(rValue, nNumFormat, 
pContext);
+                        nAttrEndRow, pCol->pAttrArray.get(), nCurRow, mrDoc, 
&mrContext);
+                    rValue = mrDoc.RoundValueAsShown(rValue, nNumFormat, 
&mrContext);
                 }
                 return true; // Found it!
             }
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 9eb660386e97..8a7a0ac0093b 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -1314,7 +1314,7 @@ void ScInterpreter::ScAnd()
                     {
                         double fVal;
                         FormulaError nErr = FormulaError::NONE;
-                        ScValueIterator aValIter( mrDoc, aRange );
+                        ScValueIterator aValIter( mrContext, mrDoc, aRange );
                         if ( aValIter.GetFirst( fVal, nErr ) && nErr == 
FormulaError::NONE )
                         {
                             bHaveValue = true;
@@ -1412,7 +1412,7 @@ void ScInterpreter::ScOr()
                     {
                         double fVal;
                         FormulaError nErr = FormulaError::NONE;
-                        ScValueIterator aValIter( mrDoc, aRange );
+                        ScValueIterator aValIter( mrContext, mrDoc, aRange );
                         if ( aValIter.GetFirst( fVal, nErr ) )
                         {
                             bHaveValue = true;
@@ -1514,7 +1514,7 @@ void ScInterpreter::ScXor()
                     {
                         double fVal;
                         FormulaError nErr = FormulaError::NONE;
-                        ScValueIterator aValIter( mrDoc, aRange );
+                        ScValueIterator aValIter( mrContext, mrDoc, aRange );
                         if ( aValIter.GetFirst( fVal, nErr ) )
                         {
                             bHaveValue = true;
@@ -3692,8 +3692,7 @@ void ScInterpreter::ScMin( bool bTextAsZero )
             {
                 FormulaError nErr = FormulaError::NONE;
                 PopDoubleRef( aRange, nParamCount, nRefInList);
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags, 
bTextAsZero );
-                aValIter.SetInterpreterContext( &mrContext );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags, bTextAsZero );
                 if (aValIter.GetFirst(nVal, nErr))
                 {
                     if (nMin > nVal)
@@ -3850,8 +3849,7 @@ void ScInterpreter::ScMax( bool bTextAsZero )
             {
                 FormulaError nErr = FormulaError::NONE;
                 PopDoubleRef( aRange, nParamCount, nRefInList);
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags, 
bTextAsZero );
-                aValIter.SetInterpreterContext( &mrContext );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags, bTextAsZero );
                 if (aValIter.GetFirst(nVal, nErr))
                 {
                     if (nMax < nVal)
@@ -4027,7 +4025,7 @@ void ScInterpreter::GetStVarParams( bool bTextAsZero, 
double(*VarResult)( double
                     ArrayRefListValue& rArrayValue = 
vArrayValues[nRefArrayPos];
                     FormulaError nErr = FormulaError::NONE;
                     PopDoubleRef( aRange, nParamCount, nRefInList);
-                    ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags, 
bTextAsZero );
+                    ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags, bTextAsZero );
                     if (aValIter.GetFirst(fVal, nErr))
                     {
                         do
@@ -4052,7 +4050,7 @@ void ScInterpreter::GetStVarParams( bool bTextAsZero, 
double(*VarResult)( double
             {
                 FormulaError nErr = FormulaError::NONE;
                 PopDoubleRef( aRange, nParamCount, nRefInList);
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags, 
bTextAsZero );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags, bTextAsZero );
                 if (aValIter.GetFirst(fVal, nErr))
                 {
                     do
diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx
index 26fd7c5d3063..01d09237a349 100644
--- a/sc/source/core/tool/interpr2.cxx
+++ b/sc/source/core/tool/interpr2.cxx
@@ -1441,7 +1441,7 @@ void ScInterpreter::ScIRR()
         }
         else
         {
-            ScValueIterator aValIter(mrDoc, aRange, mnSubTotalFlags);
+            ScValueIterator aValIter(mrContext, mrDoc, aRange, 
mnSubTotalFlags);
             bool bLoop = aValIter.GetFirst(fValue, nIterError);
             while (bLoop && nIterError == FormulaError::NONE)
             {
@@ -1549,7 +1549,7 @@ void ScInterpreter::ScMIRR()
         }
         else
         {
-            ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags );
+            ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags );
             double fCellValue;
             FormulaError nIterError = FormulaError::NONE;
 
diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx
index 35126ac19c12..3268ee5ee68c 100644
--- a/sc/source/core/tool/interpr3.cxx
+++ b/sc/source/core/tool/interpr3.cxx
@@ -2505,7 +2505,7 @@ void ScInterpreter::ScZTest()
                 ScRange aRange;
                 FormulaError nErr = FormulaError::NONE;
                 PopDoubleRef( aRange, nParam, nRefInList);
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags );
                 if (aValIter.GetFirst(fVal, nErr))
                 {
                     fSum += fVal;
@@ -2947,7 +2947,7 @@ void ScInterpreter::ScHarMean()
                 FormulaError nErr = FormulaError::NONE;
                 PopDoubleRef( aRange, nParamCount, nRefInList);
                 double nCellVal;
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags );
                 if (aValIter.GetFirst(nCellVal, nErr))
                 {
                     if (nCellVal > 0.0)
@@ -3085,7 +3085,7 @@ void ScInterpreter::ScGeoMean()
                 FormulaError nErr = FormulaError::NONE;
                 PopDoubleRef( aRange, nParamCount, nRefInList);
                 double nCellVal;
-                ScValueIterator aValIter(mrDoc, aRange, mnSubTotalFlags);
+                ScValueIterator aValIter(mrContext, mrDoc, aRange, 
mnSubTotalFlags);
                 if (aValIter.GetFirst(nCellVal, nErr))
                 {
                     if (nCellVal > 0.0)
@@ -3250,7 +3250,7 @@ bool ScInterpreter::CalculateSkew(KahanSum& fSum, double& 
fCount, std::vector<do
             {
                 PopDoubleRef( aRange, nParamCount, nRefInList);
                 FormulaError nErr = FormulaError::NONE;
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags );
                 if (aValIter.GetFirst(fVal, nErr))
                 {
                     fSum += fVal;
@@ -3885,7 +3885,7 @@ std::vector<double> ScInterpreter::GetTopNumberArray( 
SCSIZE& rCol, SCSIZE& rRow
 
             FormulaError nErr = FormulaError::NONE;
             double fCellVal;
-            ScValueIterator aValIter(mrDoc, aRange, mnSubTotalFlags);
+            ScValueIterator aValIter(mrContext, mrDoc, aRange, 
mnSubTotalFlags);
             if (aValIter.GetFirst(fCellVal, nErr))
             {
                 do
@@ -3966,8 +3966,7 @@ void ScInterpreter::GetNumberSequenceArray( sal_uInt8 
nParamCount, vector<double
 
                 FormulaError nErr = FormulaError::NONE;
                 double fCellVal;
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags );
-                aValIter.SetInterpreterContext( &mrContext );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags );
                 if (aValIter.GetFirst( fCellVal, nErr))
                 {
                     if (bIgnoreErrVal)
@@ -4305,7 +4304,7 @@ void ScInterpreter::ScAveDev()
                 FormulaError nErr = FormulaError::NONE;
                 double nCellVal;
                 PopDoubleRef( aRange, nParam, nRefInList);
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags );
                 if (aValIter.GetFirst(nCellVal, nErr))
                 {
                     rVal += nCellVal;
@@ -4384,7 +4383,7 @@ void ScInterpreter::ScAveDev()
                 FormulaError nErr = FormulaError::NONE;
                 double nCellVal;
                 PopDoubleRef( aRange, nParam, nRefInList);
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags );
                 if (aValIter.GetFirst(nCellVal, nErr))
                 {
                     rVal += std::abs(nCellVal - nMiddle);
diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx
index c8bd1c31a5b8..6f3b29912f6c 100644
--- a/sc/source/core/tool/interpr5.cxx
+++ b/sc/source/core/tool/interpr5.cxx
@@ -158,7 +158,7 @@ void ScInterpreter::ScGCD()
                 FormulaError nErr = FormulaError::NONE;
                 PopDoubleRef( aRange, nParamCount, nRefInList);
                 double nCellVal;
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags );
                 if (aValIter.GetFirst(nCellVal, nErr))
                 {
                     do
@@ -235,7 +235,7 @@ void ScInterpreter:: ScLCM()
                 FormulaError nErr = FormulaError::NONE;
                 PopDoubleRef( aRange, nParamCount, nRefInList);
                 double nCellVal;
-                ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags );
+                ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags );
                 if (aValIter.GetFirst(nCellVal, nErr))
                 {
                     do
diff --git a/sc/source/core/tool/interpr6.cxx b/sc/source/core/tool/interpr6.cxx
index 91219f96e4b2..9f8fcb6a9661 100644
--- a/sc/source/core/tool/interpr6.cxx
+++ b/sc/source/core/tool/interpr6.cxx
@@ -783,8 +783,7 @@ void ScInterpreter::IterateParameters( ScIterFunc eFunc, 
bool bTextAsZero )
                 }
                 else
                 {
-                    ScValueIterator aValIter( mrDoc, aRange, mnSubTotalFlags, 
bTextAsZero );
-                    aValIter.SetInterpreterContext( &mrContext );
+                    ScValueIterator aValIter( mrContext, mrDoc, aRange, 
mnSubTotalFlags, bTextAsZero );
                     FormulaError nErr = FormulaError::NONE;
                     if (aValIter.GetFirst(fVal, nErr))
                     {

Reply via email to