diff options
author | Łukasz Hryniuk <lukasz.hryniuk@wp.pl> | 2015-08-08 15:59:01 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2015-10-02 05:16:45 +0000 |
commit | 20f72678876b080f91310fdeae9fe838032e366c (patch) | |
tree | 0a0d8e7d0c7b81bd7a41b6a91218e5551c96187a | |
parent | 69374b8a48f8165b3f9c084a77326f23d4400dc4 (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>
-rw-r--r-- | sc/source/core/tool/interpr3.cxx | 40 |
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(); |