ENH: support file-scope 'localCode' in dynamicCode

This commit is contained in:
Mark Olesen 2011-03-08 11:08:42 +01:00
parent 8c3a8fcd21
commit e8a3587df4
6 changed files with 58 additions and 8 deletions

View File

@ -33,10 +33,20 @@ writeInterval #codeStream
-I$(LIB_SRC)/finiteVolume/lnInclude
#};
localCode
#{
static int someCode()
{
Info<<"called someCode\n";
return 10;
}
#};
code
#{
label interval = ($endIter - $begIter);
label nDumps = $nDumps;
// label nDumps = $nDumps;
label nDumps = someCode();
os << (interval / nDumps);
#};
};

View File

@ -34,22 +34,37 @@ Description
${codeInclude}
//}}} end codeInclude
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
//{{{ begin localCode
${localCode}
//}}} end localCode
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
extern "C"
{
void ${typeName}(Ostream& os, const dictionary& dict)
void ${typeName}
(
Ostream& os,
const dictionary& dict
)
{
//{{{ begin code
${code};
${code}
//}}} end code
}
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -38,6 +38,13 @@ ${codeInclude}
namespace Foam
{
// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
//{{{ begin localCode
${localCode}
//}}} end localCode
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
extern "C"
@ -188,7 +195,7 @@ void ${typeName}FixedValueFvPatchScalarField::updateCoeffs()
}
//{{{ begin code
${code};
${code}
//}}} end code
fixedValueFvPatchScalarField::updateCoeffs();

View File

@ -373,6 +373,7 @@ void Foam::dynamicCode::setFilterContext
const dynamicCodeContext& context
)
{
filterVars_.set("localCode", context.localCode());
filterVars_.set("code", context.code());
filterVars_.set("codeInclude", context.include());
filterVars_.set("SHA1sum", context.sha1().str());

View File

@ -35,6 +35,7 @@ Foam::dynamicCodeContext::dynamicCodeContext(const dictionary& dict)
:
dict_(dict),
code_(stringOps::trim(dict["code"])),
localCode_(),
include_(),
options_()
{
@ -45,6 +46,13 @@ Foam::dynamicCodeContext::dynamicCodeContext(const dictionary& dict)
// - necessary for compilation options, convenient for includes
// and body.
// optional
if (dict.found("localCode"))
{
localCode_ = stringOps::trim(dict["localCode"]);
stringOps::inplaceExpand(localCode_, dict);
}
// optional
if (dict.found("codeInclude"))
{
@ -59,9 +67,9 @@ Foam::dynamicCodeContext::dynamicCodeContext(const dictionary& dict)
stringOps::inplaceExpand(options_, dict);
}
// calculate SHA1 digest from include, options, code
// calculate SHA1 digest from include, options, localCode, code
OSHA1stream os;
os << include_ << options_ << code_;
os << include_ << options_ << localCode_ << code_;
sha1_ = os.digest();
}

View File

@ -57,6 +57,9 @@ class dynamicCodeContext
//- Mandatory "code" entry
string code_;
//- Optional "localCode" entry
string localCode_;
//- Optional "codeInclude" entry
string include_;
@ -99,6 +102,12 @@ public:
return code_;
}
//- Return the local (file-scope) code
const string& localCode() const
{
return localCode_;
}
//- Return SHA1 digest calculated from include, options, code
const SHA1Digest& sha1() const
{