summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXisco Fauli <xiscofauli@libreoffice.org>2025-01-24 16:10:44 +0100
committerXisco Fauli <xiscofauli@libreoffice.org>2025-01-24 17:52:07 +0100
commit577c47a279b4307a563f8387a16b354a470e6830 (patch)
tree072adadae9f08b2ee27bdd8fc5ecc59bafc5983c
parent5506dd8bcf587ac4472ce28d26c174bfdfd08f91 (diff)
sc: factor out common code
Change-Id: Ie76ee43b4fd00d5a1e152532017b3a30581252cf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180715 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> Tested-by: Jenkins
-rw-r--r--sc/source/core/tool/interpr1.cxx137
1 files changed, 25 insertions, 112 deletions
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())