sc/source/core/tool/interpr1.cxx |  137 +++++++--------------------------------
 1 file changed, 25 insertions(+), 112 deletions(-)

New commits:
commit 577c47a279b4307a563f8387a16b354a470e6830
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Fri Jan 24 16:10:44 2025 +0100
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Fri Jan 24 17:52:07 2025 +0100

    sc: factor out common code
    
    Change-Id: Ie76ee43b4fd00d5a1e152532017b3a30581252cf
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180715
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Tested-by: Jenkins

diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 45fdac1ae057..7f955bc410f4 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -8800,6 +8800,22 @@ void ScInterpreter::ScSortBy()
         PushIllegalParameter();
 }
 
+static void lcl_FillCell(const ScMatrixRef& pMatSource, const ScMatrixRef& 
pMatDest, SCSIZE nsC, SCSIZE nsR, SCSIZE ndC, SCSIZE ndR)
+{
+    if (pMatSource->IsEmptyCell(nsC, nsR))
+    {
+        pMatDest->PutEmpty(ndC, ndR);
+    }
+    else if (!pMatSource->IsStringOrEmpty(nsC, nsR))
+    {
+        pMatDest->PutDouble(pMatSource->GetDouble(nsC, nsR), ndC, ndR);
+    }
+    else
+    {
+        pMatDest->PutString(pMatSource->GetString(nsC, nsR), ndC, ndR);
+    }
+}
+
 void ScInterpreter::ScDrop()
 {
     sal_uInt8 nParamCount = GetByte();
@@ -8916,19 +8932,7 @@ void ScInterpreter::ScDrop()
     {
         for (SCSIZE row = 0; row < nRows; ++row)
         {
-            if (pMatSource->IsEmptyCell(aResPos[iPos].first, 
aResPos[iPos].second))
-            {
-                pResMat->PutEmpty(col, row);
-            }
-            else if (!pMatSource->IsStringOrEmpty(aResPos[iPos].first, 
aResPos[iPos].second))
-            {
-                pResMat->PutDouble(pMatSource->GetDouble(aResPos[iPos].first, 
aResPos[iPos].second), col, row);
-            }
-            else
-            {
-                pResMat->PutString(pMatSource->GetString(aResPos[iPos].first, 
aResPos[iPos].second), col, row);
-            }
-
+            lcl_FillCell(pMatSource, pResMat, aResPos[iPos].first, 
aResPos[iPos].second, col, row);
             ++iPos;
         }
     }
@@ -9038,20 +9042,7 @@ void ScInterpreter::ScExpand()
         for (SCSIZE row = 0; row < nRows; ++row)
         {
             if (col < nsC && row < nsR)
-            {
-                if (pMatSource->IsEmptyCell(col, row))
-                {
-                    pResMat->PutEmpty(col, row);
-                }
-                else if (!pMatSource->IsStringOrEmpty(col, row))
-                {
-                    pResMat->PutDouble(pMatSource->GetDouble(col, row), col, 
row);
-                }
-                else
-                {
-                    pResMat->PutString(pMatSource->GetString(col, row), col, 
row);
-                }
-            }
+                lcl_FillCell(pMatSource, pResMat, col, row, col, row);
             else
             {
                 if (bDouble.has_value())
@@ -9186,19 +9177,7 @@ void ScInterpreter::ScTake()
     {
         for (SCSIZE row = 0; row < nRows; ++row)
         {
-            if (pMatSource->IsEmptyCell(aResPos[iPos].first, 
aResPos[iPos].second))
-            {
-                pResMat->PutEmpty(col, row);
-            }
-            else if (!pMatSource->IsStringOrEmpty(aResPos[iPos].first, 
aResPos[iPos].second))
-            {
-                pResMat->PutDouble(pMatSource->GetDouble(aResPos[iPos].first, 
aResPos[iPos].second), col, row);
-            }
-            else
-            {
-                pResMat->PutString(pMatSource->GetString(aResPos[iPos].first, 
aResPos[iPos].second), col, row);
-            }
-
+            lcl_FillCell(pMatSource, pResMat, aResPos[iPos].first, 
aResPos[iPos].second, col, row);
             ++iPos;
         }
     }
@@ -9300,18 +9279,7 @@ void ScInterpreter::ScToCol()
     // fill result matrix to the same column
     for (SCSIZE iPos = 0; iPos < aResPos.size(); ++iPos)
     {
-        if (pMatSource->IsEmptyCell(aResPos[iPos].first, aResPos[iPos].second))
-        {
-            pResMat->PutEmpty(0, iPos);
-        }
-        else if (!pMatSource->IsStringOrEmpty(aResPos[iPos].first, 
aResPos[iPos].second))
-        {
-            pResMat->PutDouble(pMatSource->GetDouble(aResPos[iPos].first, 
aResPos[iPos].second), 0, iPos);
-        }
-        else
-        {
-            pResMat->PutString(pMatSource->GetString(aResPos[iPos].first, 
aResPos[iPos].second), 0, iPos);
-        }
+        lcl_FillCell(pMatSource, pResMat, aResPos[iPos].first, 
aResPos[iPos].second, 0, iPos);
     }
 
     PushMatrix(pResMat);
@@ -9411,18 +9379,7 @@ void ScInterpreter::ScToRow()
     // fill result matrix to the same row
     for (SCSIZE iPos = 0; iPos < aResPos.size(); ++iPos)
     {
-        if (pMatSource->IsEmptyCell(aResPos[iPos].first, aResPos[iPos].second))
-        {
-            pResMat->PutEmpty(iPos, 0);
-        }
-        else if (!pMatSource->IsStringOrEmpty(aResPos[iPos].first, 
aResPos[iPos].second))
-        {
-            pResMat->PutDouble(pMatSource->GetDouble(aResPos[iPos].first, 
aResPos[iPos].second), iPos, 0);
-        }
-        else
-        {
-            pResMat->PutString(pMatSource->GetString(aResPos[iPos].first, 
aResPos[iPos].second), iPos, 0);
-        }
+        lcl_FillCell(pMatSource, pResMat, aResPos[iPos].first, 
aResPos[iPos].second, iPos, 0);
     }
 
     PushMatrix(pResMat);
@@ -9533,36 +9490,14 @@ void ScInterpreter::ScUnique()
         {
             for (SCSIZE col = 0; col < nsC; col++)
             {
-                if (pMatSource->IsEmptyCell(col, aResPos[iPos].first))
-                {
-                    pResMat->PutEmpty(col, iPos);
-                }
-                else if (!pMatSource->IsStringOrEmpty(col, 
aResPos[iPos].first))
-                {
-                    pResMat->PutDouble(pMatSource->GetDouble(col, 
aResPos[iPos].first), col, iPos);
-                }
-                else
-                {
-                    pResMat->PutString(pMatSource->GetString(col, 
aResPos[iPos].first), col, iPos);
-                }
+                lcl_FillCell(pMatSource, pResMat, col, aResPos[iPos].first, 
col, iPos);
             }
         }
         else
         {
             for (SCSIZE row = 0; row < nsR; row++)
             {
-                if (pMatSource->IsEmptyCell(aResPos[iPos].first, row))
-                {
-                    pResMat->PutEmpty(iPos, row);
-                }
-                else if (!pMatSource->IsStringOrEmpty(aResPos[iPos].first, 
row))
-                {
-                    
pResMat->PutDouble(pMatSource->GetDouble(aResPos[iPos].first, row), iPos, row);
-                }
-                else
-                {
-                    
pResMat->PutString(pMatSource->GetString(aResPos[iPos].first, row), iPos, row);
-                }
+                lcl_FillCell(pMatSource, pResMat, aResPos[iPos].first, row, 
iPos, row);
             }
         }
     }
@@ -9868,18 +9803,7 @@ void ScInterpreter::ScWrapCols()
         {
             if (iPos < aResPos.size())
             {
-                if (pMatSource->IsEmptyCell(aResPos[iPos].first, 
aResPos[iPos].second))
-                {
-                    pResMat->PutEmpty(col, row);
-                }
-                else if (!pMatSource->IsStringOrEmpty(aResPos[iPos].first, 
aResPos[iPos].second))
-                {
-                    
pResMat->PutDouble(pMatSource->GetDouble(aResPos[iPos].first, 
aResPos[iPos].second), col, row);
-                }
-                else
-                {
-                    
pResMat->PutString(pMatSource->GetString(aResPos[iPos].first, 
aResPos[iPos].second), col, row);
-                }
+                lcl_FillCell(pMatSource, pResMat, aResPos[iPos].first, 
aResPos[iPos].second, col, row);
                 ++iPos;
             }
             else if (bDouble.has_value())
@@ -9982,18 +9906,7 @@ void ScInterpreter::ScWrapRows()
         {
             if (iPos < aResPos.size())
             {
-                if (pMatSource->IsEmptyCell(aResPos[iPos].first, 
aResPos[iPos].second))
-                {
-                    pResMat->PutEmpty(col, row);
-                }
-                else if (!pMatSource->IsStringOrEmpty(aResPos[iPos].first, 
aResPos[iPos].second))
-                {
-                    
pResMat->PutDouble(pMatSource->GetDouble(aResPos[iPos].first, 
aResPos[iPos].second), col, row);
-                }
-                else
-                {
-                    
pResMat->PutString(pMatSource->GetString(aResPos[iPos].first, 
aResPos[iPos].second), col, row);
-                }
+                lcl_FillCell(pMatSource, pResMat, aResPos[iPos].first, 
aResPos[iPos].second, col, row);
                 ++iPos;
             }
             else if (bDouble.has_value())

Reply via email to