diff options
author | Eike Rathke <erack@redhat.com> | 2018-08-24 12:33:52 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2018-08-24 14:53:20 +0200 |
commit | 3aa566566923e3a2d582d72c1141774056bb9554 (patch) | |
tree | 6fb12c9fc3669d8e3f8b897974c8af345fba4fce | |
parent | ce91b05fd79e34bbbb07cbec75f2fedf8b1960f3 (diff) |
Consolidate duplicated code, use VectorMatrixAccessor, tdf#117016 follow-up
Change-Id: I52650913034b1d490ad567867ad4405531095d92
Reviewed-on: https://gerrit.libreoffice.org/59551
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
-rw-r--r-- | sc/source/core/tool/interpr1.cxx | 71 |
1 files changed, 24 insertions, 47 deletions
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx index b5bebbb0f2f8..1738538c86db 100644 --- a/sc/source/core/tool/interpr1.cxx +++ b/sc/source/core/tool/interpr1.cxx @@ -6771,59 +6771,37 @@ void ScInterpreter::ScLookup() if (bOmitErrorValues) { std::vector<double> vArray; - if (bVertical) + VectorMatrixAccessor aMatAcc(*pDataMat, bVertical); + const SCSIZE nElements = aMatAcc.GetElementCount(); + for (SCSIZE i=0; i < nElements; ++i) { - for (SCSIZE i = 0; i < nR; ++i) + const double fVal = aMatAcc.GetDouble(i); + if (rtl::math::isFinite(fVal)) { - const double fVal = pDataMat->GetDouble(0, i); - if (rtl::math::isFinite(fVal)) - { - vArray.push_back(fVal); - vIndex.push_back(i); - } - } - if (vArray.empty()) - { - PushNA(); - return; - } - const size_t nElems = vArray.size(); - if (nElems == nR) - { - // No error value omitted, use as is. - pDataMat2 = pDataMat; - std::vector<long>().swap( vIndex); - } - else - { - ScMatrixRef pTempMat = GetNewMat( 1, nElems); - pTempMat->PutDoubleVector( vArray, 0, 0); - pDataMat2 = pTempMat; - nLenMajor = nElems; + vArray.push_back(fVal); + vIndex.push_back(i); } } + if (vArray.empty()) + { + PushNA(); + return; + } + const size_t nElems = vArray.size(); + if (nElems == nElements) + { + // No error value omitted, use as is. + pDataMat2 = pDataMat; + std::vector<long>().swap( vIndex); + } else { - for (SCSIZE i = 0; i < nC; ++i) - { - const double fVal = pDataMat->GetDouble(i, 0); - if (rtl::math::isFinite(fVal)) - { - vArray.push_back(fVal); - vIndex.push_back(i); - } - } - if (vArray.empty()) - { - PushNA(); - return; - } - const size_t nElems = vArray.size(); - if (nElems == nC) + nLenMajor = nElems; + if (bVertical) { - // No error value omitted, use as is. - pDataMat2 = pDataMat; - std::vector<long>().swap( vIndex); + ScMatrixRef pTempMat = GetNewMat( 1, nElems); + pTempMat->PutDoubleVector( vArray, 0, 0); + pDataMat2 = pTempMat; } else { @@ -6831,7 +6809,6 @@ void ScInterpreter::ScLookup() for (size_t i=0; i < nElems; ++i) pTempMat->PutDouble( vArray[i], i, 0); pDataMat2 = pTempMat; - nLenMajor = nElems; } } } |