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())