Kaydet (Commit) 9b79a443 authored tarafından Tor Lillqvist's avatar Tor Lillqvist Kaydeden (comit) László Németh

Avoid pointless single-line wrapper for OpenCL isnan()

Change-Id: I4056a1afac1413616a06d0b2f03d4bdead6cad10
üst f0249a88
...@@ -57,9 +57,8 @@ static const char* publicFunc = ...@@ -57,9 +57,8 @@ static const char* publicFunc =
" return (as_ulong(fVal) & 0XFFFF); // any other error\n" " return (as_ulong(fVal) & 0XFFFF); // any other error\n"
"}\n" "}\n"
"\n" "\n"
"int isNan(double a) { return isnan(a); }\n"
"double fsum_count(double a, double b, __private int *p) {\n" "double fsum_count(double a, double b, __private int *p) {\n"
" bool t = isNan(a);\n" " bool t = isnan(a);\n"
" (*p) += t?0:1;\n" " (*p) += t?0:1;\n"
" return t?b:a+b;\n" " return t?b:a+b;\n"
"}\n" "}\n"
...@@ -75,8 +74,8 @@ static const char* publicFunc = ...@@ -75,8 +74,8 @@ static const char* publicFunc =
" (*p) += t?0:1;\n" " (*p) += t?0:1;\n"
" return result;\n" " return result;\n"
"}\n" "}\n"
"double fsum(double a, double b) { return isNan(a)?b:a+b; }\n" "double fsum(double a, double b) { return isnan(a)?b:a+b; }\n"
"double legalize(double a, double b) { return isNan(a)?b:a;}\n" "double legalize(double a, double b) { return isnan(a)?b:a;}\n"
"double fsub(double a, double b) { return a-b; }\n" "double fsub(double a, double b) { return a-b; }\n"
"double fdiv(double a, double b) { return a/b; }\n" "double fdiv(double a, double b) { return a/b; }\n"
"double strequal(unsigned a, unsigned b) { return (a==b)?1.0:0; }\n" "double strequal(unsigned a, unsigned b) { return (a==b)?1.0:0; }\n"
...@@ -906,7 +905,7 @@ public: ...@@ -906,7 +905,7 @@ public:
virtual std::string GenSlidingWindowDeclRef( bool nested ) const override virtual std::string GenSlidingWindowDeclRef( bool nested ) const override
{ {
std::stringstream ss; std::stringstream ss;
ss << "(!isNan(" << VectorRef::GenSlidingWindowDeclRef(); ss << "(!isnan(" << VectorRef::GenSlidingWindowDeclRef();
ss << ")?" << VectorRef::GenSlidingWindowDeclRef(); ss << ")?" << VectorRef::GenSlidingWindowDeclRef();
ss << ":" << mStringArgument.GenSlidingWindowDeclRef(nested); ss << ":" << mStringArgument.GenSlidingWindowDeclRef(nested);
ss << ")"; ss << ")";
...@@ -1151,7 +1150,7 @@ public: ...@@ -1151,7 +1150,7 @@ public:
virtual std::string GenSlidingWindowDeclRef( bool nested ) const override virtual std::string GenSlidingWindowDeclRef( bool nested ) const override
{ {
std::stringstream ss; std::stringstream ss;
ss << "(!isNan(" << mDoubleArgument.GenSlidingWindowDeclRef(); ss << "(!isnan(" << mDoubleArgument.GenSlidingWindowDeclRef();
ss << ")?" << mDoubleArgument.GenSlidingWindowDeclRef(); ss << ")?" << mDoubleArgument.GenSlidingWindowDeclRef();
ss << ":" << mStringArgument.GenSlidingWindowDeclRef(nested); ss << ":" << mStringArgument.GenSlidingWindowDeclRef(nested);
ss << ")"; ss << ")";
...@@ -1401,12 +1400,12 @@ public: ...@@ -1401,12 +1400,12 @@ public:
ss << " tmp = " << mpCodeGen->GetBottom() << ";\n"; ss << " tmp = " << mpCodeGen->GetBottom() << ";\n";
ss << " int loopOffset = l*512;\n"; ss << " int loopOffset = l*512;\n";
ss << " if((loopOffset + lidx + offset + 256) < end) {\n"; ss << " if((loopOffset + lidx + offset + 256) < end) {\n";
ss << " tmp = legalize((isNan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)"; ss << " tmp = legalize((isnan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
ss << ", tmp);\n"; ss << ", tmp);\n";
ss << " tmp = legalize((isNan(A[loopOffset + lidx + offset+256])?tmp:tmp+1.0)"; ss << " tmp = legalize((isnan(A[loopOffset + lidx + offset+256])?tmp:tmp+1.0)";
ss << ", tmp);\n"; ss << ", tmp);\n";
ss << " } else if ((loopOffset + lidx + offset) < end)\n"; ss << " } else if ((loopOffset + lidx + offset) < end)\n";
ss << " tmp = legalize((isNan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)"; ss << " tmp = legalize((isnan(A[loopOffset + lidx + offset])?tmp:tmp+1.0)";
ss << ", tmp);\n"; ss << ", tmp);\n";
ss << " shm_buf[lidx] = tmp;\n"; ss << " shm_buf[lidx] = tmp;\n";
ss << " barrier(CLK_LOCAL_MEM_FENCE);\n"; ss << " barrier(CLK_LOCAL_MEM_FENCE);\n";
...@@ -1734,7 +1733,7 @@ public: ...@@ -1734,7 +1733,7 @@ public:
if (!bNanHandled) if (!bNanHandled)
{ {
ss << "if (isNan("; ss << "if (isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef(); ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n"; ss << "))\n";
if (ZeroReturnZero()) if (ZeroReturnZero())
...@@ -1895,7 +1894,7 @@ public: ...@@ -1895,7 +1894,7 @@ public:
static_cast<const formula::SingleVectorRefToken*> static_cast<const formula::SingleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken()); (vSubArguments[i]->GetFormulaToken());
temp3 << pSVR->GetArrayLength(); temp3 << pSVR->GetArrayLength();
temp3 << ")||isNan(" << vSubArguments[i] temp3 << ")||isnan(" << vSubArguments[i]
->GenSlidingWindowDeclRef(); ->GenSlidingWindowDeclRef();
temp3 << ")?0:"; temp3 << ")?0:";
temp3 << vSubArguments[i]->GenSlidingWindowDeclRef(); temp3 << vSubArguments[i]->GenSlidingWindowDeclRef();
...@@ -1908,7 +1907,7 @@ public: ...@@ -1908,7 +1907,7 @@ public:
static_cast<const formula::DoubleVectorRefToken*> static_cast<const formula::DoubleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken()); (vSubArguments[i]->GetFormulaToken());
temp3 << pSVR->GetArrayLength(); temp3 << pSVR->GetArrayLength();
temp3 << ")||isNan(" << vSubArguments[i] temp3 << ")||isnan(" << vSubArguments[i]
->GenSlidingWindowDeclRef(true); ->GenSlidingWindowDeclRef(true);
temp3 << ")?0:"; temp3 << ")?0:";
temp3 << vSubArguments[i]->GenSlidingWindowDeclRef(true); temp3 << vSubArguments[i]->GenSlidingWindowDeclRef(true);
...@@ -1971,7 +1970,7 @@ public: ...@@ -1971,7 +1970,7 @@ public:
static_cast<const formula::SingleVectorRefToken*> static_cast<const formula::SingleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken()); (vSubArguments[i]->GetFormulaToken());
temp4 << pSVR->GetArrayLength(); temp4 << pSVR->GetArrayLength();
temp4 << ")||isNan(" << vSubArguments[i] temp4 << ")||isnan(" << vSubArguments[i]
->GenSlidingWindowDeclRef(); ->GenSlidingWindowDeclRef();
temp4 << ")?0:"; temp4 << ")?0:";
temp4 << vSubArguments[i]->GenSlidingWindowDeclRef(); temp4 << vSubArguments[i]->GenSlidingWindowDeclRef();
...@@ -1984,7 +1983,7 @@ public: ...@@ -1984,7 +1983,7 @@ public:
static_cast<const formula::DoubleVectorRefToken*> static_cast<const formula::DoubleVectorRefToken*>
(vSubArguments[i]->GetFormulaToken()); (vSubArguments[i]->GetFormulaToken());
temp4 << pSVR->GetArrayLength(); temp4 << pSVR->GetArrayLength();
temp4 << ")||isNan(" << vSubArguments[i] temp4 << ")||isnan(" << vSubArguments[i]
->GenSlidingWindowDeclRef(true); ->GenSlidingWindowDeclRef(true);
temp4 << ")?0:"; temp4 << ")?0:";
temp4 << vSubArguments[i]->GenSlidingWindowDeclRef(true); temp4 << vSubArguments[i]->GenSlidingWindowDeclRef(true);
...@@ -2032,7 +2031,7 @@ public: ...@@ -2032,7 +2031,7 @@ public:
virtual std::string Gen2( const std::string& lhs, const std::string& rhs ) const override virtual std::string Gen2( const std::string& lhs, const std::string& rhs ) const override
{ {
std::stringstream ss; std::stringstream ss;
ss << "(isNan(" << lhs << ")?" << rhs << ":" << rhs << "+1.0)"; ss << "(isnan(" << lhs << ")?" << rhs << ":" << rhs << "+1.0)";
return ss.str(); return ss.str();
} }
virtual std::string BinFuncName() const override { return "fcount"; } virtual std::string BinFuncName() const override { return "fcount"; }
......
...@@ -54,7 +54,7 @@ void OpBesselj::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -54,7 +54,7 @@ void OpBesselj::GenSlidingWindowFunction(std::stringstream &ss,
ss << " {\n"; ss << " {\n";
ss << " x = "; ss << " x = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
ss << " if (isNan(x))\n"; ss << " if (isnan(x))\n";
ss << " x = 0.0;\n"; ss << " x = 0.0;\n";
ss << " }\n"; ss << " }\n";
} }
...@@ -86,7 +86,7 @@ void OpBesselj::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -86,7 +86,7 @@ void OpBesselj::GenSlidingWindowFunction(std::stringstream &ss,
ss << " {\n"; ss << " {\n";
ss << " N = "; ss << " N = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n";
ss << " if (isNan(N))\n"; ss << " if (isnan(N))\n";
ss << " N = 0.0;\n"; ss << " N = 0.0;\n";
ss << " }\n"; ss << " }\n";
} }
...@@ -225,7 +225,7 @@ void OpGestep::GenSlidingWindowFunction( ...@@ -225,7 +225,7 @@ void OpGestep::GenSlidingWindowFunction(
} }
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode()) if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{ {
ss << " if (isNan("; ss << " if (isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef(); ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n"; ss << "))\n";
ss << " tmp"<<i<<" = 0;\n"; ss << " tmp"<<i<<" = 0;\n";
......
...@@ -45,7 +45,7 @@ void OpAnd::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -45,7 +45,7 @@ void OpAnd::GenSlidingWindowFunction(std::stringstream &ss,
formula::SingleVectorRefToken *>(tmpCur0); formula::SingleVectorRefToken *>(tmpCur0);
ss<< " int buffer_len"<<j<<" = "<<pCurDVR->GetArrayLength(); ss<< " int buffer_len"<<j<<" = "<<pCurDVR->GetArrayLength();
ss<< ";\n"; ss<< ";\n";
ss <<" if(gid0 >= buffer_len"<<j<<" || isNan("; ss <<" if(gid0 >= buffer_len"<<j<<" || isnan(";
ss <<vSubArguments[j]->GenSlidingWindowDeclRef(); ss <<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<"))\n"; ss <<"))\n";
ss <<" tmp = 1;\n else\n"; ss <<" tmp = 1;\n else\n";
...@@ -78,14 +78,14 @@ void OpAnd::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -78,14 +78,14 @@ void OpAnd::GenSlidingWindowFunction(std::stringstream &ss,
} }
if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()) if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed())
{ {
ss <<" if(isNan("<<vSubArguments[j]->GenSlidingWindowDeclRef(); ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<")||i+gid0>="<<pCurDVR->GetArrayLength(); ss <<")||i+gid0>="<<pCurDVR->GetArrayLength();
ss <<")\n"; ss <<")\n";
ss <<" tmp = 1;\n else\n"; ss <<" tmp = 1;\n else\n";
} }
else else
{ {
ss <<" if(isNan("<<vSubArguments[j]->GenSlidingWindowDeclRef(); ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<")||i>="<<pCurDVR->GetArrayLength(); ss <<")||i>="<<pCurDVR->GetArrayLength();
ss <<")\n"; ss <<")\n";
ss <<" tmp = 1;\n else\n"; ss <<" tmp = 1;\n else\n";
...@@ -130,7 +130,7 @@ void OpOr::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -130,7 +130,7 @@ void OpOr::GenSlidingWindowFunction(std::stringstream &ss,
formula::SingleVectorRefToken *>(tmpCur0); formula::SingleVectorRefToken *>(tmpCur0);
ss<< " int buffer_len"<<j<<" = "<<pCurDVR->GetArrayLength(); ss<< " int buffer_len"<<j<<" = "<<pCurDVR->GetArrayLength();
ss<< ";\n"; ss<< ";\n";
ss <<" if(gid0 >= buffer_len"<<j<<" || isNan("; ss <<" if(gid0 >= buffer_len"<<j<<" || isnan(";
ss <<vSubArguments[j]->GenSlidingWindowDeclRef(); ss <<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<"))\n"; ss <<"))\n";
ss <<" tmp = 0;\n else\n"; ss <<" tmp = 0;\n else\n";
...@@ -163,14 +163,14 @@ void OpOr::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -163,14 +163,14 @@ void OpOr::GenSlidingWindowFunction(std::stringstream &ss,
} }
if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()) if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed())
{ {
ss <<" if(isNan("<<vSubArguments[j]->GenSlidingWindowDeclRef(); ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<")||i+gid0>="<<pCurDVR->GetArrayLength(); ss <<")||i+gid0>="<<pCurDVR->GetArrayLength();
ss <<")\n"; ss <<")\n";
ss <<" tmp = 0;\n else\n"; ss <<" tmp = 0;\n else\n";
} }
else else
{ {
ss <<" if(isNan("<<vSubArguments[j]->GenSlidingWindowDeclRef(); ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
ss <<")||i>="<<pCurDVR->GetArrayLength(); ss <<")||i>="<<pCurDVR->GetArrayLength();
ss <<")\n"; ss <<")\n";
ss <<" tmp = 0;\n else\n"; ss <<" tmp = 0;\n else\n";
...@@ -204,7 +204,7 @@ void OpNot::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -204,7 +204,7 @@ void OpNot::GenSlidingWindowFunction(std::stringstream &ss,
{ {
const formula::SingleVectorRefToken*pCurDVR= static_cast<const const formula::SingleVectorRefToken*pCurDVR= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0); formula::SingleVectorRefToken *>(tmpCur0);
ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isNan("; ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isnan(";
ss <<vSubArguments[0]->GenSlidingWindowDeclRef(); ss <<vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<"))\n"; ss <<"))\n";
ss <<" tmp = 0;\n else\n"; ss <<" tmp = 0;\n else\n";
...@@ -244,7 +244,7 @@ void OpXor::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -244,7 +244,7 @@ void OpXor::GenSlidingWindowFunction(std::stringstream &ss,
{ {
const formula::SingleVectorRefToken*pCurDVR= static_cast<const const formula::SingleVectorRefToken*pCurDVR= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0); formula::SingleVectorRefToken *>(tmpCur0);
ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isNan("; ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isnan(";
ss <<rArg->GenSlidingWindowDeclRef(); ss <<rArg->GenSlidingWindowDeclRef();
ss <<"))\n"; ss <<"))\n";
ss <<" tmp = 0;\n else\n"; ss <<" tmp = 0;\n else\n";
...@@ -279,14 +279,14 @@ void OpXor::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -279,14 +279,14 @@ void OpXor::GenSlidingWindowFunction(std::stringstream &ss,
} }
if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()) if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed())
{ {
ss <<" if(isNan("<<rArg->GenSlidingWindowDeclRef(); ss <<" if(isnan("<<rArg->GenSlidingWindowDeclRef();
ss <<")||i+gid0>="<<pCurDVR->GetArrayLength(); ss <<")||i+gid0>="<<pCurDVR->GetArrayLength();
ss <<")\n"; ss <<")\n";
ss <<" tmp = 0;\n else\n"; ss <<" tmp = 0;\n else\n";
} }
else else
{ {
ss <<" if(isNan("<<rArg->GenSlidingWindowDeclRef(); ss <<" if(isnan("<<rArg->GenSlidingWindowDeclRef();
ss <<")||i>="<<pCurDVR->GetArrayLength(); ss <<")||i>="<<pCurDVR->GetArrayLength();
ss <<")\n"; ss <<")\n";
ss <<" tmp = 0;\n else\n"; ss <<" tmp = 0;\n else\n";
...@@ -324,7 +324,7 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -324,7 +324,7 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss,
{ {
if(vSubArguments.size()==3) if(vSubArguments.size()==3)
{ {
ss << " if(isNan("; ss << " if(isnan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss << ")|| "; ss << ")|| ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << vSubArguments[0]->GenSlidingWindowDeclRef();
...@@ -339,7 +339,7 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -339,7 +339,7 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss,
} }
if(vSubArguments.size()==2) if(vSubArguments.size()==2)
{ {
ss << " if(isNan("; ss << " if(isnan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss << ")|| "; ss << ")|| ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << vSubArguments[0]->GenSlidingWindowDeclRef();
...@@ -352,7 +352,7 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -352,7 +352,7 @@ void OpIf::GenSlidingWindowFunction(std::stringstream &ss,
} }
if(vSubArguments.size()==1) if(vSubArguments.size()==1)
{ {
ss << " if(isNan("; ss << " if(isnan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss << ")|| "; ss << ")|| ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << vSubArguments[0]->GenSlidingWindowDeclRef();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -229,7 +229,7 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss, ...@@ -229,7 +229,7 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss,
ss << " if(singleIndex>="; ss << " if(singleIndex>=";
ss << pTmpDVR1->GetArrayLength(); ss << pTmpDVR1->GetArrayLength();
ss << " ||"; ss << " ||";
ss << "isNan("; ss << "isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef(true); ss << vSubArguments[i]->GenSlidingWindowDeclRef(true);
ss << "))\n"; ss << "))\n";
ss << " tmp"; ss << " tmp";
...@@ -249,7 +249,7 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss, ...@@ -249,7 +249,7 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss,
ss << " if(doubleIndex>="; ss << " if(doubleIndex>=";
ss << pTmpDVR2->GetArrayLength(); ss << pTmpDVR2->GetArrayLength();
ss << " ||"; ss << " ||";
ss << "isNan("; ss << "isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef(); ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n"; ss << "))\n";
ss << " tmp"; ss << " tmp";
...@@ -265,7 +265,7 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss, ...@@ -265,7 +265,7 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss,
vSubArguments[i]->GetFormulaToken()->GetOpCode() != ocPush) vSubArguments[i]->GetFormulaToken()->GetOpCode() != ocPush)
{ {
ss << " if("; ss << " if(";
ss << "isNan("; ss << "isnan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef(); ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n"; ss << "))\n";
ss << " tmp"; ss << " tmp";
......
...@@ -217,7 +217,7 @@ public: ...@@ -217,7 +217,7 @@ public:
SubArguments& vSubArguments, int argumentNum ); SubArguments& vSubArguments, int argumentNum );
static void CheckAllSubArgumentIsNan( std::stringstream& ss, static void CheckAllSubArgumentIsNan( std::stringstream& ss,
SubArguments& vSubArguments ); SubArguments& vSubArguments );
// only check isNan // only check isnan
static void CheckSubArgumentIsNan2( std::stringstream& ss, static void CheckSubArgumentIsNan2( std::stringstream& ss,
SubArguments& vSubArguments, int argumentNum, const std::string& p ); SubArguments& vSubArguments, int argumentNum, const std::string& p );
static void UnrollDoubleVector( std::stringstream& ss, static void UnrollDoubleVector( std::stringstream& ss,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment