summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2018-08-24 12:33:52 +0200
committerEike Rathke <erack@redhat.com>2018-08-24 14:53:20 +0200
commit3aa566566923e3a2d582d72c1141774056bb9554 (patch)
tree6fb12c9fc3669d8e3f8b897974c8af345fba4fce
parentce91b05fd79e34bbbb07cbec75f2fedf8b1960f3 (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.cxx71
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;
}
}
}