summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2022-08-30 12:20:11 +0200
committerLuboš Luňák <l.lunak@collabora.com>2022-08-31 09:14:34 +0200
commit0fe3863a4ef510009bc3191c035f1deafdd2fb6e (patch)
tree951da218893925580ac9d71ecf714b70aab22f9b /sc
parentfd72a87868708569d19cccaab158116107698db5 (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.cxx1044
-rw-r--r--sc/source/core/opencl/opbase.cxx31
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";
+ }
}