diff options
author | Xisco Fauli <xiscofauli@libreoffice.org> | 2025-01-24 16:10:44 +0100 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2025-01-24 17:52:07 +0100 |
commit | 577c47a279b4307a563f8387a16b354a470e6830 (patch) | |
tree | 072adadae9f08b2ee27bdd8fc5ecc59bafc5983c | |
parent | 5506dd8bcf587ac4472ce28d26c174bfdfd08f91 (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.cxx | 137 |
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()) |