diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2022-08-30 12:20:11 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2022-08-31 09:14:34 +0200 |
commit | 0fe3863a4ef510009bc3191c035f1deafdd2fb6e (patch) | |
tree | 951da218893925580ac9d71ecf714b70aab22f9b /sc | |
parent | fd72a87868708569d19cccaab158116107698db5 (diff) |
revert 'loplugin:flatten in sc' in sc/source/core/opencl
I have patches rewriting this code to be much cleaner, so this
won't be necessary and it makes it hard to rebase those patches.
Also at least the CheckVariables::CheckSubArgumentIsNan() change
actually makes the code worse.
Change-Id: I5d63c158c6883200e2c6e03d02e00f6672d6a1af
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139048
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/opencl/op_statistical.cxx | 1044 | ||||
-rw-r--r-- | sc/source/core/opencl/opbase.cxx | 31 |
2 files changed, 539 insertions, 536 deletions
diff --git a/sc/source/core/opencl/op_statistical.cxx b/sc/source/core/opencl/op_statistical.cxx index 3de4417fb240..ff7ed1e95bca 100644 --- a/sc/source/core/opencl/op_statistical.cxx +++ b/sc/source/core/opencl/op_statistical.cxx @@ -494,73 +494,167 @@ void OpTTest::GenSlidingWindowFunction(std::stringstream &ss, ss << "}\n"; return ; } - if(vSubArguments.size() != 4) - return; - - FormulaToken *pCur = vSubArguments[0]->GetFormulaToken(); - FormulaToken *pCur1 = vSubArguments[1]->GetFormulaToken(); - FormulaToken *pCur2 = vSubArguments[2]->GetFormulaToken(); - FormulaToken *pCur3 = vSubArguments[3]->GetFormulaToken(); - assert(pCur); - assert(pCur1); - assert(pCur2); - assert(pCur3); - if(ocPush == vSubArguments[2]->GetFormulaToken()->GetOpCode()) + if(vSubArguments.size() == 4) { - if(pCur2->GetType() == formula::svSingleVectorRef) + FormulaToken *pCur = vSubArguments[0]->GetFormulaToken(); + FormulaToken *pCur1 = vSubArguments[1]->GetFormulaToken(); + FormulaToken *pCur2 = vSubArguments[2]->GetFormulaToken(); + FormulaToken *pCur3 = vSubArguments[3]->GetFormulaToken(); + assert(pCur); + assert(pCur1); + assert(pCur2); + assert(pCur3); + if(ocPush == vSubArguments[2]->GetFormulaToken()->GetOpCode()) { - const formula::SingleVectorRefToken* pSVR = - static_cast< const formula::SingleVectorRefToken*>(pCur2); - ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; - ss << " {\n"; - ss << " mode = " ; - ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ";\n"; - ss << " if (isnan(mode))\n"; - ss << " mode = 0.0;\n"; - ss << " else\n"; - ss << " mode = floor(mode);\n"; - ss << " }\n"; + if(pCur2->GetType() == formula::svSingleVectorRef) + { + const formula::SingleVectorRefToken* pSVR = + static_cast< const formula::SingleVectorRefToken*>(pCur2); + ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; + ss << " {\n"; + ss << " mode = " ; + ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ";\n"; + ss << " if (isnan(mode))\n"; + ss << " mode = 0.0;\n"; + ss << " else\n"; + ss << " mode = floor(mode);\n"; + ss << " }\n"; + } + else if(pCur2->GetType() == formula::svDouble) + { + ss << " mode = floor(convert_double("; + ss << pCur2->GetDouble() << "));\n"; + } + else + { + ss << " return DBL_MAX;\n"; + ss << "}\n"; + return ; + } } - else if(pCur2->GetType() == formula::svDouble) + else { - ss << " mode = floor(convert_double("; - ss << pCur2->GetDouble() << "));\n"; + ss << " mode = floor(" ; + ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ");\n"; } - else + ss << " if(!(mode == 1.0 || mode == 2.0))\n"; + ss << " return DBL_MAX;\n"; + if(ocPush==vSubArguments[3]->GetFormulaToken()->GetOpCode()) { - ss << " return DBL_MAX;\n"; - ss << "}\n"; - return ; + if(pCur3->GetType() == formula::svSingleVectorRef) + { + const formula::SingleVectorRefToken* pSVR = + static_cast< const formula::SingleVectorRefToken*>(pCur3); + assert(pSVR); + ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; + ss << " {\n"; + ss << " if (isnan("; + ss << vSubArguments[3]->GenSlidingWindowDeclRef() << "))\n"; + ss << " type=0.0;\n"; + ss << " else\n"; + ss << " type=floor("; + ss << vSubArguments[3]->GenSlidingWindowDeclRef() << ");\n"; + ss << " }\n"; + } + else if(pCur3->GetType() == formula::svDouble) + { + ss << " type = floor(convert_double(" << pCur3->GetDouble() << + "));\n"; + } + else + { + ss << " return DBL_MAX;\n"; + ss << "}\n"; + return ; + } } - } - else - { - ss << " mode = floor(" ; - ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ");\n"; - } - ss << " if(!(mode == 1.0 || mode == 2.0))\n"; - ss << " return DBL_MAX;\n"; - if(ocPush==vSubArguments[3]->GetFormulaToken()->GetOpCode()) - { - if(pCur3->GetType() == formula::svSingleVectorRef) + else { - const formula::SingleVectorRefToken* pSVR = - static_cast< const formula::SingleVectorRefToken*>(pCur3); - assert(pSVR); - ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; - ss << " {\n"; - ss << " if (isnan("; - ss << vSubArguments[3]->GenSlidingWindowDeclRef() << "))\n"; - ss << " type=0.0;\n"; - ss << " else\n"; - ss << " type=floor("; + ss << " type=floor("; ss << vSubArguments[3]->GenSlidingWindowDeclRef() << ");\n"; - ss << " }\n"; } - else if(pCur3->GetType() == formula::svDouble) + ss << " if(!(type == 1.0||type == 2.0||type == 3.0))\n"; + ss << " return DBL_MAX;\n"; + + if(pCur->GetType() == formula::svDoubleVectorRef && + pCur1->GetType() == formula::svDoubleVectorRef) { - ss << " type = floor(convert_double(" << pCur3->GetDouble() << - "));\n"; + const formula::DoubleVectorRefToken* pDVR = + static_cast<const formula::DoubleVectorRefToken *>(pCur); + const formula::DoubleVectorRefToken* pDVR1 = + static_cast<const formula::DoubleVectorRefToken *>(pCur1); + + size_t nCurWindowSize = pDVR->GetRefRowSize(); + size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); + + if(nCurWindowSize == nCurWindowSize1) + { + ss << " if(type == 1.0)\n"; + ss << " {\n"; + ss << " for (int i = "; + if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) && + (!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) + { + ss << "gid0; i < " << pDVR->GetArrayLength(); + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) && + (pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i < " << pDVR->GetArrayLength(); + ss << " && i < gid0+"<< nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) && + (!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i + gid0 < " << pDVR->GetArrayLength(); + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((pDVR->IsStartFixed() && pDVR->IsEndFixed()) && + (pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) + { + ss << "0; i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else + { + ss << "0; i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + ss << " break;\n"; + ss << " }"; + ss << " return DBL_MAX;\n"; + ss << " }\n"; + ss << "}\n"; + return ; + } + + ss << " arg1 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef(true) << ";\n"; + ss << " arg2 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef(true) << ";\n"; + ss << " if (isnan(arg1)||isnan(arg2))\n"; + ss << " continue;\n"; + ss << " fSum1 += arg1;\n"; + ss << " fSum2 += arg2;\n"; + ss << " fSumSqr1 += (arg1 - arg2)*(arg1 - arg2);\n"; + ss << " fCount1 += 1;\n"; + ss << " }\n"; + ss << " if(fCount1 < 1.0)\n"; + ss << " return DBL_MAX;\n"; + ss << " fT = sqrt(fCount1-1.0) * fabs(fSum1 - fSum2)\n"; + ss << " /sqrt(fCount1 * fSumSqr1 - (fSum1-fSum2)\n"; + ss << " *(fSum1-fSum2));\n"; + ss << " fF = fCount1 - 1.0;\n"; + } + else + { + ss << " return DBL_MAX;\n"; + ss << "}\n"; + return ; + } } else { @@ -568,225 +662,131 @@ void OpTTest::GenSlidingWindowFunction(std::stringstream &ss, ss << "}\n"; return ; } - } - else - { - ss << " type=floor("; - ss << vSubArguments[3]->GenSlidingWindowDeclRef() << ");\n"; - } - ss << " if(!(type == 1.0||type == 2.0||type == 3.0))\n"; - ss << " return DBL_MAX;\n"; - - if(pCur->GetType() == formula::svDoubleVectorRef && - pCur1->GetType() == formula::svDoubleVectorRef) - { - const formula::DoubleVectorRefToken* pDVR = - static_cast<const formula::DoubleVectorRefToken *>(pCur); - const formula::DoubleVectorRefToken* pDVR1 = - static_cast<const formula::DoubleVectorRefToken *>(pCur1); - - size_t nCurWindowSize = pDVR->GetRefRowSize(); - size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); + ss << " }\n"; + ss << " if(type == 2.0 || type == 3.0)\n"; + ss << " {\n"; - if(nCurWindowSize == nCurWindowSize1) + if(pCur->GetType() == formula::svDoubleVectorRef && + pCur1->GetType() == formula::svDoubleVectorRef) { - ss << " if(type == 1.0)\n"; - ss << " {\n"; + const formula::DoubleVectorRefToken* pDVR = + static_cast<const formula::DoubleVectorRefToken *>(pCur); + const formula::DoubleVectorRefToken* pDVR1 = + static_cast<const formula::DoubleVectorRefToken *>(pCur1); + + size_t nCurWindowSize = pDVR->GetRefRowSize(); + size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); ss << " for (int i = "; - if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) && - (!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) + if (!pDVR->IsStartFixed() && pDVR->IsEndFixed()) { ss << "gid0; i < " << pDVR->GetArrayLength(); ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; } - else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) && - (pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) { ss << "0; i < " << pDVR->GetArrayLength(); ss << " && i < gid0+"<< nCurWindowSize << "; i++)\n"; ss << " {\n"; } - else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) && - (!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) { ss << "0; i + gid0 < " << pDVR->GetArrayLength(); ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; } - else if ((pDVR->IsStartFixed() && pDVR->IsEndFixed()) && - (pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) - { - ss << "0; i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } else { ss << "0; i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; - ss << " break;\n"; - ss << " }"; - ss << " return DBL_MAX;\n"; - ss << " }\n"; - ss << "}\n"; - return ; } ss << " arg1 = "; ss << vSubArguments[0]->GenSlidingWindowDeclRef(true) << ";\n"; + ss << " if (isnan(arg1))\n"; + ss << " continue;\n"; + ss << " fSum1 += arg1;\n"; + ss << " fSumSqr1 += arg1 * arg1;\n"; + ss << " fCount1 += 1;\n"; + ss << " }\n"; + + ss << " for (int i = "; + if (!pDVR1->IsStartFixed() && pDVR1->IsEndFixed()) + { + ss << "gid0; i < " << pDVR1->GetArrayLength(); + ss << " && i < " << nCurWindowSize1 << "; i++)\n"; + ss << " {\n"; + } + else if (pDVR1->IsStartFixed() && !pDVR1->IsEndFixed()) + { + ss << "0; i < " << pDVR1->GetArrayLength(); + ss << " && i < gid0+"<< nCurWindowSize1 << "; i++)\n"; + ss << " {\n"; + } + else if (!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed()) + { + ss << "0; i + gid0 < " << pDVR1->GetArrayLength(); + ss << " && i < " << nCurWindowSize1 << "; i++)\n"; + ss << " {\n"; + } + else + { + ss << "0; i < " << nCurWindowSize1 << "; i++)\n"; + ss << " {\n"; + } ss << " arg2 = "; ss << vSubArguments[1]->GenSlidingWindowDeclRef(true) << ";\n"; - ss << " if (isnan(arg1)||isnan(arg2))\n"; + ss << " if (isnan(arg2))\n"; ss << " continue;\n"; - ss << " fSum1 += arg1;\n"; ss << " fSum2 += arg2;\n"; - ss << " fSumSqr1 += (arg1 - arg2)*(arg1 - arg2);\n"; - ss << " fCount1 += 1;\n"; + ss << " fSumSqr2 += arg2 * arg2;\n"; + ss << " fCount2 += 1;\n"; ss << " }\n"; - ss << " if(fCount1 < 1.0)\n"; - ss << " return DBL_MAX;\n"; - ss << " fT = sqrt(fCount1-1.0) * fabs(fSum1 - fSum2)\n"; - ss << " /sqrt(fCount1 * fSumSqr1 - (fSum1-fSum2)\n"; - ss << " *(fSum1-fSum2));\n"; - ss << " fF = fCount1 - 1.0;\n"; } else { - ss << " return DBL_MAX;\n"; + ss << " return DBL_MAX;\n"; + ss << " }\n"; ss << "}\n"; return ; } - } - else - { - ss << " return DBL_MAX;\n"; - ss << "}\n"; - return ; - } - ss << " }\n"; - ss << " if(type == 2.0 || type == 3.0)\n"; - ss << " {\n"; - - if(pCur->GetType() == formula::svDoubleVectorRef && - pCur1->GetType() == formula::svDoubleVectorRef) - { - const formula::DoubleVectorRefToken* pDVR = - static_cast<const formula::DoubleVectorRefToken *>(pCur); - const formula::DoubleVectorRefToken* pDVR1 = - static_cast<const formula::DoubleVectorRefToken *>(pCur1); - - size_t nCurWindowSize = pDVR->GetRefRowSize(); - size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); - ss << " for (int i = "; - if (!pDVR->IsStartFixed() && pDVR->IsEndFixed()) - { - ss << "gid0; i < " << pDVR->GetArrayLength(); - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - { - ss << "0; i < " << pDVR->GetArrayLength(); - ss << " && i < gid0+"<< nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - { - ss << "0; i + gid0 < " << pDVR->GetArrayLength(); - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else - { - ss << "0; i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - - ss << " arg1 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef(true) << ";\n"; - ss << " if (isnan(arg1))\n"; - ss << " continue;\n"; - ss << " fSum1 += arg1;\n"; - ss << " fSumSqr1 += arg1 * arg1;\n"; - ss << " fCount1 += 1;\n"; - ss << " }\n"; - - ss << " for (int i = "; - if (!pDVR1->IsStartFixed() && pDVR1->IsEndFixed()) - { - ss << "gid0; i < " << pDVR1->GetArrayLength(); - ss << " && i < " << nCurWindowSize1 << "; i++)\n"; - ss << " {\n"; - } - else if (pDVR1->IsStartFixed() && !pDVR1->IsEndFixed()) - { - ss << "0; i < " << pDVR1->GetArrayLength(); - ss << " && i < gid0+"<< nCurWindowSize1 << "; i++)\n"; - ss << " {\n"; - } - else if (!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed()) - { - ss << "0; i + gid0 < " << pDVR1->GetArrayLength(); - ss << " && i < " << nCurWindowSize1 << "; i++)\n"; - ss << " {\n"; - } - else - { - ss << "0; i < " << nCurWindowSize1 << "; i++)\n"; - ss << " {\n"; - } - ss << " arg2 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef(true) << ";\n"; - ss << " if (isnan(arg2))\n"; - ss << " continue;\n"; - ss << " fSum2 += arg2;\n"; - ss << " fSumSqr2 += arg2 * arg2;\n"; - ss << " fCount2 += 1;\n"; - ss << " }\n"; - } - else - { - ss << " return DBL_MAX;\n"; + ss << " if (fCount1 < 2.0 || fCount2 < 2.0)\n"; + ss << " return DBL_MAX;\n"; ss << " }\n"; + ss << " if(type == 3.0)\n"; + ss << " {\n"; + ss << " double fS1 = (fSumSqr1-fSum1*fSum1/fCount1)\n"; + ss << " /(fCount1-1.0)/fCount1;\n"; + ss << " double fS2 = (fSumSqr2-fSum2*fSum2/fCount2)\n"; + ss << " /(fCount2-1.0)/fCount2;\n"; + ss << " if (fS1 + fS2 == 0.0)\n"; + ss << " return DBL_MAX;\n"; + ss << " fT = fabs(fSum1/fCount1 - fSum2/fCount2)\n"; + ss << " /sqrt(fS1+fS2);\n"; + ss << " double c = fS1/(fS1+fS2);\n"; + ss << " fF = 1.0/(c*c/(fCount1-1.0)+(1.0-c)*(1.0-c)\n"; + ss << " /(fCount2-1.0));\n"; + ss << " }\n"; + ss << " if(type == 2.0)\n"; + ss << " {\n"; + ss << " double fS1 = (fSumSqr1 - fSum1*fSum1/fCount1)\n"; + ss << " /(fCount1 - 1.0);\n"; + ss << " double fS2 = (fSumSqr2 - fSum2*fSum2/fCount2)\n"; + ss << " /(fCount2 - 1.0);\n"; + ss << " fT = fabs( fSum1/fCount1 - fSum2/fCount2 )\n"; + ss << " /sqrt( (fCount1-1.0)*fS1 + (fCount2-1.0)*fS2 )\n"; + ss << " *sqrt( fCount1*fCount2*(fCount1+fCount2-2)\n"; + ss << " /(fCount1+fCount2) );\n"; + ss << " fF = fCount1 + fCount2 - 2;\n"; + ss << " }\n"; + + ss << " double tdist=GetTDist(fT, fF);\n"; + ss << " if (mode==1)\n"; + ss << " return tdist;\n"; + ss << " else\n"; + ss << " return 2.0*tdist;\n"; ss << "}\n"; - return ; } - ss << " if (fCount1 < 2.0 || fCount2 < 2.0)\n"; - ss << " return DBL_MAX;\n"; - ss << " }\n"; - ss << " if(type == 3.0)\n"; - ss << " {\n"; - ss << " double fS1 = (fSumSqr1-fSum1*fSum1/fCount1)\n"; - ss << " /(fCount1-1.0)/fCount1;\n"; - ss << " double fS2 = (fSumSqr2-fSum2*fSum2/fCount2)\n"; - ss << " /(fCount2-1.0)/fCount2;\n"; - ss << " if (fS1 + fS2 == 0.0)\n"; - ss << " return DBL_MAX;\n"; - ss << " fT = fabs(fSum1/fCount1 - fSum2/fCount2)\n"; - ss << " /sqrt(fS1+fS2);\n"; - ss << " double c = fS1/(fS1+fS2);\n"; - ss << " fF = 1.0/(c*c/(fCount1-1.0)+(1.0-c)*(1.0-c)\n"; - ss << " /(fCount2-1.0));\n"; - ss << " }\n"; - ss << " if(type == 2.0)\n"; - ss << " {\n"; - ss << " double fS1 = (fSumSqr1 - fSum1*fSum1/fCount1)\n"; - ss << " /(fCount1 - 1.0);\n"; - ss << " double fS2 = (fSumSqr2 - fSum2*fSum2/fCount2)\n"; - ss << " /(fCount2 - 1.0);\n"; - ss << " fT = fabs( fSum1/fCount1 - fSum2/fCount2 )\n"; - ss << " /sqrt( (fCount1-1.0)*fS1 + (fCount2-1.0)*fS2 )\n"; - ss << " *sqrt( fCount1*fCount2*(fCount1+fCount2-2)\n"; - ss << " /(fCount1+fCount2) );\n"; - ss << " fF = fCount1 + fCount2 - 2;\n"; - ss << " }\n"; - - ss << " double tdist=GetTDist(fT, fF);\n"; - ss << " if (mode==1)\n"; - ss << " return tdist;\n"; - ss << " else\n"; - ss << " return 2.0*tdist;\n"; - ss << "}\n"; } void OpVarP::GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) @@ -2572,121 +2572,122 @@ void OpSlope::GenSlidingWindowFunction(std::stringstream &ss, FormulaToken *pCur1 = vSubArguments[0]->GetFormulaToken(); assert(pCur); assert(pCur1); - if (pCur->GetType() != formula::svDoubleVectorRef || - pCur1->GetType() != formula::svDoubleVectorRef) + if (pCur->GetType() == formula::svDoubleVectorRef&& + pCur1->GetType() == formula::svDoubleVectorRef) { - throw Unhandled(__FILE__, __LINE__); - } + const formula::DoubleVectorRefToken* pDVR = + static_cast<const formula::DoubleVectorRefToken *>(pCur); + const formula::DoubleVectorRefToken* pDVR1 = + static_cast<const formula::DoubleVectorRefToken *>(pCur1); - const formula::DoubleVectorRefToken* pDVR = - static_cast<const formula::DoubleVectorRefToken *>(pCur); - const formula::DoubleVectorRefToken* pDVR1 = - static_cast<const formula::DoubleVectorRefToken *>(pCur1); + size_t nCurWindowSize = pDVR->GetRefRowSize(); + size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); + size_t arrayLength = pDVR->GetArrayLength()< + pDVR1->GetArrayLength() ? pDVR->GetArrayLength(): + pDVR1->GetArrayLength(); + if(nCurWindowSize != nCurWindowSize1) + throw Unhandled(__FILE__, __LINE__); + ss << " for (int i = "; + if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) + &&(!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) + { + ss << "gid0; i < " << arrayLength; + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + &&(pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i < " << arrayLength ; + ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + &&(!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i + gid0 < " << arrayLength; + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((pDVR->IsStartFixed() && pDVR->IsEndFixed()) + &&(pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) + { + ss << "0; i < " << arrayLength << "; i++)\n"; + ss << " {\n"; + } + else + { + throw Unhandled(__FILE__, __LINE__); + } - size_t nCurWindowSize = pDVR->GetRefRowSize(); - size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); - size_t arrayLength = pDVR->GetArrayLength()< - pDVR1->GetArrayLength() ? pDVR->GetArrayLength(): - pDVR1->GetArrayLength(); - if(nCurWindowSize != nCurWindowSize1) - throw Unhandled(__FILE__, __LINE__); - ss << " for (int i = "; - if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) - &&(!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) - { - ss << "gid0; i < " << arrayLength; - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - &&(pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i < " << arrayLength ; - ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - &&(!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i + gid0 < " << arrayLength; - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((pDVR->IsStartFixed() && pDVR->IsEndFixed()) - &&(pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) - { - ss << "0; i < " << arrayLength << "; i++)\n"; - ss << " {\n"; - } - else - { - throw Unhandled(__FILE__, __LINE__); - } + ss << " argX = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << " argY = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " if (isnan(argX) || isnan(argY))\n"; + ss << " continue;\n"; + ss << " fSumX += argX;\n"; + ss << " fSumY += argY;\n"; + ss << " fCount += 1.0;\n"; + ss << " }\n"; - ss << " argX = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << " argY = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " if (isnan(argX) || isnan(argY))\n"; - ss << " continue;\n"; - ss << " fSumX += argX;\n"; - ss << " fSumY += argY;\n"; - ss << " fCount += 1.0;\n"; - ss << " }\n"; + ss << " if (fCount < 1.0)\n"; + ss << " return CreateDoubleError(NoValue);\n"; + ss << " else\n"; + ss << " {\n"; + ss << " fMeanX = fSumX * pow(fCount,-1.0);\n"; + ss << " fMeanY = fSumY * pow(fCount,-1.0);\n"; - ss << " if (fCount < 1.0)\n"; - ss << " return CreateDoubleError(NoValue);\n"; - ss << " else\n"; - ss << " {\n"; - ss << " fMeanX = fSumX * pow(fCount,-1.0);\n"; - ss << " fMeanY = fSumY * pow(fCount,-1.0);\n"; + ss << " for (int i = "; + if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) + &&(!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) + { + ss << "gid0; i < " << arrayLength; + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + &&(pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i < " << arrayLength ; + ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + &&(!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i + gid0 < " << arrayLength; + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else + { + ss << "0; i < " << arrayLength << "; i++)\n"; + ss << " {\n"; + } - ss << " for (int i = "; - if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) - &&(!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) - { - ss << "gid0; i < " << arrayLength; - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - &&(pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i < " << arrayLength ; - ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - &&(!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i + gid0 < " << arrayLength; - ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " argX = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << " argY = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " if (isnan(argX) || isnan(argY))\n"; + ss << " continue;\n"; + ss << " fSumDeltaXDeltaY += (argX-fMeanX)*(argY-fMeanY);\n"; + ss << " fSumSqrDeltaX += (argX-fMeanX) * (argX-fMeanX);\n"; + ss << " }\n"; + ss << " if(fSumSqrDeltaX == 0.0)\n"; + ss << " return CreateDoubleError(DivisionByZero);\n"; + ss << " else\n"; ss << " {\n"; + ss << " return fSumDeltaXDeltaY*pow(fSumSqrDeltaX,-1.0);\n"; + ss << " }\n"; + ss << " }\n"; + ss << "}\n"; } else { - ss << "0; i < " << arrayLength << "; i++)\n"; - ss << " {\n"; + throw Unhandled(__FILE__, __LINE__); } - - ss << " argX = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << " argY = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " if (isnan(argX) || isnan(argY))\n"; - ss << " continue;\n"; - ss << " fSumDeltaXDeltaY += (argX-fMeanX)*(argY-fMeanY);\n"; - ss << " fSumSqrDeltaX += (argX-fMeanX) * (argX-fMeanX);\n"; - ss << " }\n"; - ss << " if(fSumSqrDeltaX == 0.0)\n"; - ss << " return CreateDoubleError(DivisionByZero);\n"; - ss << " else\n"; - ss << " {\n"; - ss << " return fSumDeltaXDeltaY*pow(fSumSqrDeltaX,-1.0);\n"; - ss << " }\n"; - ss << " }\n"; - ss << "}\n"; - } void OpSTEYX::GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) @@ -6873,192 +6874,193 @@ void OpCovar::GenSlidingWindowFunction(std::stringstream& ss, static_cast<const formula::DoubleVectorRefToken* >(pCurY); size_t nCurWindowSizeX = pCurDVRX->GetRefRowSize(); size_t nCurWindowSizeY = pCurDVRY->GetRefRowSize(); - if(nCurWindowSizeX != nCurWindowSizeY) - { - throw Unhandled(__FILE__, __LINE__); - } - - ss << " for( "; - if (!pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { - ss << "int i = gid0; i < " << nCurWindowSizeX; - ss << " && i < " << pCurDVRX->GetArrayLength() << " && i < "; - ss << pCurDVRY->GetArrayLength() << "; i++){\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; - ss << " isnan("<< vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = 0.0;\n"; - ss << " arg1 = 0.0;\n"; - ss << " --cnt;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << "}\n"; - ss << " ++cnt;\n"; - ss << " vSum0 += arg0;\n"; - ss << " vSum1 += arg1;\n"; - ss << " }\n"; - } - else if (pCurDVRX->IsStartFixed() && !pCurDVRX->IsEndFixed()) { - ss << "int i = 0; i < gid0 + " << nCurWindowSizeX << " && "; - ss << " i < " << pCurDVRX->GetArrayLength() << " && "; - ss << " i < " << pCurDVRY->GetArrayLength() << "; i++) {\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; - ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = 0.0;\n"; - ss << " arg1 = 0.0;\n"; - ss << " --cnt;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " ++cnt;\n"; - ss << " vSum0 += arg0;\n"; - ss << " vSum1 += arg1;\n"; - ss << " }\n"; - } - else if (pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { - ss << "int i = 0; i < " << nCurWindowSizeX << " && i < "; - ss << pCurDVRX->GetArrayLength() << " && i < "; - ss << pCurDVRY->GetArrayLength() << "; i++) {\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; - ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = 0.0;\n"; - ss << " arg1 = 0.0;\n"; - ss << " --cnt;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " ++cnt;\n"; - ss << " vSum0 += arg0;\n"; - ss << " vSum1 += arg1;\n"; - ss << " }\n"; - } - else { - ss << "int i = 0; i < " << nCurWindowSizeX << " && "; - ss << " i + gid0 < " << pCurDVRX->GetArrayLength(); - ss << " && i + gid0 < " << pCurDVRY->GetArrayLength(); - ss << "; i++) {\n"; - ss << "if ((isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ")) || "; - ss << "(isnan("<< vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << "))) {\n"; - ss << " arg0 = 0.0;\n"; - ss << " arg1 = 0.0;\n"; - ss << " --cnt;\n"; - ss << " }\n"; - ss << " else {\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << " }\n"; - ss << " ++cnt;\n"; - ss << " vSum0 += arg0;\n"; - ss << " vSum1 += arg1;\n"; - ss << " }\n"; - } - ss << " if(cnt < 1) {\n"; - ss << " return CreateDoubleError(NoValue);\n"; - ss << " }\n"; - ss << " else {\n"; - ss << " vMean0 = vSum0 / cnt;\n"; - ss << " vMean1 = vSum1 / cnt;\n"; - ss << " for("; - if (!pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { - ss << "int i = gid0; i < " << nCurWindowSizeX; - ss << " && i < " << pCurDVRX->GetArrayLength() << " && i < "; - ss << pCurDVRY->GetArrayLength() << "; i++){\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; - ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")){\n"; - ss << " arg0 = vMean0;\n"; - ss << " arg1 = vMean1;\n"; - ss << " }\n"; - ss << " else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; - ss << " }\n"; - } - else if (pCurDVRX->IsStartFixed() && !pCurDVRX->IsEndFixed()) { - ss << "int i = 0; i < gid0 + " << nCurWindowSizeX << " && "; - ss << " i < " << pCurDVRX->GetArrayLength() << " && "; - ss << " i < " << pCurDVRY->GetArrayLength() << "; i++) {\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") || "; - ss << "isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = vMean0;\n"; - ss << " arg1 = vMean1;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + if(nCurWindowSizeX == nCurWindowSizeY) + { + ss << " for( "; + if (!pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { + ss << "int i = gid0; i < " << nCurWindowSizeX; + ss << " && i < " << pCurDVRX->GetArrayLength() << " && i < "; + ss << pCurDVRY->GetArrayLength() << "; i++){\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; + ss << " isnan("<< vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = 0.0;\n"; + ss << " arg1 = 0.0;\n"; + ss << " --cnt;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << "}\n"; + ss << " ++cnt;\n"; + ss << " vSum0 += arg0;\n"; + ss << " vSum1 += arg1;\n"; + ss << " }\n"; + } + else if (pCurDVRX->IsStartFixed() && !pCurDVRX->IsEndFixed()) { + ss << "int i = 0; i < gid0 + " << nCurWindowSizeX << " && "; + ss << " i < " << pCurDVRX->GetArrayLength() << " && "; + ss << " i < " << pCurDVRY->GetArrayLength() << "; i++) {\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; + ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = 0.0;\n"; + ss << " arg1 = 0.0;\n"; + ss << " --cnt;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " ++cnt;\n"; + ss << " vSum0 += arg0;\n"; + ss << " vSum1 += arg1;\n"; + ss << " }\n"; + } + else if (pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { + ss << "int i = 0; i < " << nCurWindowSizeX << " && i < "; + ss << pCurDVRX->GetArrayLength() << " && i < "; + ss << pCurDVRY->GetArrayLength() << "; i++) {\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; + ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = 0.0;\n"; + ss << " arg1 = 0.0;\n"; + ss << " --cnt;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " ++cnt;\n"; + ss << " vSum0 += arg0;\n"; + ss << " vSum1 += arg1;\n"; + ss << " }\n"; + } + else { + ss << "int i = 0; i < " << nCurWindowSizeX << " && "; + ss << " i + gid0 < " << pCurDVRX->GetArrayLength(); + ss << " && i + gid0 < " << pCurDVRY->GetArrayLength(); + ss << "; i++) {\n"; + ss << "if ((isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ")) || "; + ss << "(isnan("<< vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << "))) {\n"; + ss << " arg0 = 0.0;\n"; + ss << " arg1 = 0.0;\n"; + ss << " --cnt;\n"; + ss << " }\n"; + ss << " else {\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << " }\n"; + ss << " ++cnt;\n"; + ss << " vSum0 += arg0;\n"; + ss << " vSum1 += arg1;\n"; + ss << " }\n"; + } + ss << " if(cnt < 1) {\n"; + ss << " return CreateDoubleError(NoValue);\n"; ss << " }\n"; - } - else if (pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { - ss << "int i = 0; i < " << nCurWindowSizeX << " && i < "; - ss << pCurDVRX->GetArrayLength() << " && i < "; - ss << pCurDVRY->GetArrayLength() << "; i++) {\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") || "; - ss << "isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = vMean0;\n"; - ss << " arg1 = vMean1;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + ss << " else {\n"; + ss << " vMean0 = vSum0 / cnt;\n"; + ss << " vMean1 = vSum1 / cnt;\n"; + ss << " for("; + if (!pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { + ss << "int i = gid0; i < " << nCurWindowSizeX; + ss << " && i < " << pCurDVRX->GetArrayLength() << " && i < "; + ss << pCurDVRY->GetArrayLength() << "; i++){\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; + ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")){\n"; + ss << " arg0 = vMean0;\n"; + ss << " arg1 = vMean1;\n"; + ss << " }\n"; + ss << " else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + ss << " }\n"; + } + else if (pCurDVRX->IsStartFixed() && !pCurDVRX->IsEndFixed()) { + ss << "int i = 0; i < gid0 + " << nCurWindowSizeX << " && "; + ss << " i < " << pCurDVRX->GetArrayLength() << " && "; + ss << " i < " << pCurDVRY->GetArrayLength() << "; i++) {\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") || "; + ss << "isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = vMean0;\n"; + ss << " arg1 = vMean1;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + ss << " }\n"; + } + else if (pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { + ss << "int i = 0; i < " << nCurWindowSizeX << " && i < "; + ss << pCurDVRX->GetArrayLength() << " && i < "; + ss << pCurDVRY->GetArrayLength() << "; i++) {\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") || "; + ss << "isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = vMean0;\n"; + ss << " arg1 = vMean1;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + ss << " }\n"; + } + else { + ss << "int i = 0; i < " << nCurWindowSizeX << " && "; + ss << " i + gid0 < " << pCurDVRX->GetArrayLength(); + ss << " && i + gid0 < " << pCurDVRX->GetArrayLength(); + ss << "; i++) {\n"; + ss << "if((isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ")) || "; + ss << "(isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << "))) {\n"; + ss << " arg0 = vMean0;\n"; + ss << " arg1 = vMean1;\n"; + ss << " }\n"; + ss << " else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << " }\n"; + ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + ss << " }\n"; + } + ss << " return vSum / cnt;\n"; ss << " }\n"; + ss << "}"; } - else { - ss << "int i = 0; i < " << nCurWindowSizeX << " && "; - ss << " i + gid0 < " << pCurDVRX->GetArrayLength(); - ss << " && i + gid0 < " << pCurDVRX->GetArrayLength(); - ss << "; i++) {\n"; - ss << "if((isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ")) || "; - ss << "(isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << "))) {\n"; - ss << " arg0 = vMean0;\n"; - ss << " arg1 = vMean1;\n"; - ss << " }\n"; - ss << " else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << " }\n"; - ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; - ss << " }\n"; + else + { + throw Unhandled(__FILE__, __LINE__); } - ss << " return vSum / cnt;\n"; - ss << " }\n"; - ss << "}"; - } else { ss << " int cnt0 = 0,cnt1 = 0;\n"; diff --git a/sc/source/core/opencl/opbase.cxx b/sc/source/core/opencl/opbase.cxx index 12361d907766..9c607f58ba4d 100644 --- a/sc/source/core/opencl/opbase.cxx +++ b/sc/source/core/opencl/opbase.cxx @@ -252,22 +252,23 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss, ss << vSubArguments[i]->GenSlidingWindowDeclRef(); ss << ";\n"; } - if (vSubArguments[i]->GetFormulaToken()->GetType() != formula::svDouble && - vSubArguments[i]->GetFormulaToken()->GetOpCode() == ocPush) - return; + if (vSubArguments[i]->GetFormulaToken()->GetType() == formula::svDouble || + vSubArguments[i]->GetFormulaToken()->GetOpCode() != ocPush) + { + ss << " if("; + ss << "isnan("; + ss << vSubArguments[i]->GenSlidingWindowDeclRef(); + ss << "))\n"; + ss << " tmp"; + ss << i; + ss << "=0;\n else \n"; + ss << " tmp"; + ss << i; + ss << "="; + ss << vSubArguments[i]->GenSlidingWindowDeclRef(); + ss << ";\n"; - ss << " if("; - ss << "isnan("; - ss << vSubArguments[i]->GenSlidingWindowDeclRef(); - ss << "))\n"; - ss << " tmp"; - ss << i; - ss << "=0;\n else \n"; - ss << " tmp"; - ss << i; - ss << "="; - ss << vSubArguments[i]->GenSlidingWindowDeclRef(); - ss << ";\n"; + } } |