summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorŁukasz Hryniuk <lukasz.hryniuk@wp.pl>2015-08-08 15:59:01 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2015-10-02 05:16:45 +0000
commit20f72678876b080f91310fdeae9fe838032e366c (patch)
tree0a0d8e7d0c7b81bd7a41b6a91218e5551c96187a /sc
parent69374b8a48f8165b3f9c084a77326f23d4400dc4 (diff)
tdf#89387 Use Collect method in FTest
Change-Id: Ib397b70f5c33fcf0f8ab26c82bffe7713e1042fd Reviewed-on: https://gerrit.libreoffice.org/17595 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/tool/interpr3.cxx40
1 files changed, 16 insertions, 24 deletions
diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx
index 6d27e3b1b978..ab9efe94d65f 100644
--- a/sc/source/core/tool/interpr3.cxx
+++ b/sc/source/core/tool/interpr3.cxx
@@ -27,6 +27,7 @@
#include "formulacell.hxx"
#include "document.hxx"
#include "dociter.hxx"
+#include "matrixoperators.hxx"
#include "scmatrix.hxx"
#include "globstr.hrc"
@@ -2761,7 +2762,6 @@ void ScInterpreter::ScFTest()
}
SCSIZE nC1, nC2;
SCSIZE nR1, nR2;
- SCSIZE i, j;
pMat1->GetDimensions(nC1, nR1);
pMat2->GetDimensions(nC2, nR2);
double fCount1 = 0.0;
@@ -2770,29 +2770,21 @@ void ScInterpreter::ScFTest()
double fSumSqr1 = 0.0;
double fSum2 = 0.0;
double fSumSqr2 = 0.0;
- double fVal;
- for (i = 0; i < nC1; i++)
- for (j = 0; j < nR1; j++)
- {
- if (!pMat1->IsString(i,j))
- {
- fVal = pMat1->GetDouble(i,j);
- fSum1 += fVal;
- fSumSqr1 += fVal * fVal;
- fCount1++;
- }
- }
- for (i = 0; i < nC2; i++)
- for (j = 0; j < nR2; j++)
- {
- if (!pMat2->IsString(i,j))
- {
- fVal = pMat2->GetDouble(i,j);
- fSum2 += fVal;
- fSumSqr2 += fVal * fVal;
- fCount2++;
- }
- }
+
+ std::vector<std::unique_ptr<sc::op::Op>> aOp;
+ aOp.emplace_back(new sc::op::Op(0.0, [](double& rAccum, double fVal){rAccum += fVal;}));
+ aOp.emplace_back(new sc::op::Op(0.0, [](double& rAccum, double fVal){rAccum += fVal * fVal;}));
+
+ auto aVal1 = pMat1->Collect(false, aOp);
+ fSum1 = aVal1[0].mfFirst + aVal1[0].mfRest;
+ fSumSqr1 = aVal1[1].mfFirst + aVal1[1].mfRest;
+ fCount1 = aVal1[2].mnCount;
+
+ auto aVal2 = pMat2->Collect(false, aOp);
+ fSum2 = aVal2[0].mfFirst + aVal2[0].mfRest;
+ fSumSqr2 = aVal2[1].mfFirst + aVal2[1].mfRest;
+ fCount2 = aVal2[2].mnCount;
+
if (fCount1 < 2.0 || fCount2 < 2.0)
{
PushNoValue();