| Introduction | Start | acdkcfgscript | Language | Library | Embedding | CfgScript IDE | Debugging | Templates | Samples | Wish List |
CfgScript can easily be embedded into a C++ application.
Embedding the CfgScript into a ACDK application is quite easy:
Two classes are mainly used to control the Script:
acdk::cfgscript::Props for the internal (and also external)
heap/'stack' of the interpreter and the class
acdk::cfgscript::Script
for executing a script.
#include <acdk/cfgscript/Script.h>
::acdk::cfgscript::RScript script = new ::acdk::cfgscript::Script("<mem>");
::acdk::cfgscript::RProps props = new ::acdk::cfgscript::Props();
// pass variable to the interpreter
props->setObjectVal("sb", new StringBuffer("CfgScript"));
RString code =
"String retString = \"Hallo\" + sb.toString();\n"
"acdk.lang.System.out.println(retString);\n"
;
// ScriptReadWriteParent allows the interpreter to write into
// the given props
script->eval(code, &props, ::acdk::cfgscript::ScriptReadWriteParent);
// get the resulting string
RString retString = props->getStringVal("retString");
|
Much more simple is to use the embedded Props evaluations functions:
#include <acdk/cfgscript/Props.h>
// ...
::acdk::cfgscript::RProps props = new ::acdk::cfgscript::Props();
props->setIntVal("i", 42);
props->setIntVal("j", 1);
// ${expr} where expr is either a Props key or a CfgScript expression
RString s = props->eval("${i + j}");
testAssert(s->equals("43"));
// !{ script }!
// script will be evaluated as CfgScript script.
// the !{ script }! will be replaced with the output
// written by the script to 'out'
s = props->eval("!{ out.print(i + j); }!");
testAssert(s->equals("43"));
|
Another example:
RProps props = new Props();
props.setIntVal("i", 42);
RString erg = props.eval("$i");
erg->equals("42") == true;
// inline expression
props.eval("!{ if (i < 42) erg = \"isSmaller\" else erg = \"isGreaterOrSame\" }");
props->getStringVal("erg")->equals("isGreaterOrSame") == true;
|
The CfgScript interpreter is embedded in following ACDK applications: