supporting recursive arrays in DSM DI action

git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1917 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Stefan Sayer 16 years ago
parent 75be85ab79
commit 997f08be38

@ -841,6 +841,24 @@ SCDIAction::SCDIAction(const string& arg, bool get_res)
}
}
void string2argarray(const string& key, const string& val, AmArg& res) {
if (key.empty())
return;
if (!(isArgStruct(res) || isArgUndef(res))) {
WARN("array element [%s] is shadowed by value '%s'\n",
key.c_str(), AmArg::print(res).c_str());
return;
}
size_t delim = key.find(".");
if (delim == string::npos) {
res[key]=val;
return;
}
string2argarray(key.substr(delim+1), val, res[key.substr(0,delim)]);
}
EXEC_ACTION_START(SCDIAction) {
if (params.size() < 2) {
@ -906,8 +924,12 @@ EXEC_ACTION_START(SCDIAction) {
if ((lb->first.length() < varprefix.length()) ||
strncmp(lb->first.c_str(), varprefix.c_str(),varprefix.length()))
break;
string varname = lb->first.substr(varprefix.length());
var_struct[varname] = lb->second;
if (varname.find(".") == string::npos)
var_struct[varname] = lb->second;
else
string2argarray(varname, lb->second, var_struct);
lb++;
has_vars = true;

@ -158,6 +158,10 @@ core actions:
DI(factory, function [, params...])
e.g. DI(factory, function, $var_param, (int)int_param, "$str param", @select_par, ...)
DI(user_timer, setTimer, (int)1, (int)5, @local_tag);
set($sweets.candy="nice");
set($sweets.fruit="superb");
set($sweets.cake.tahini="great");
DI(myfactory, myfunc, (array)sweets);
* sets $errno (arg,config)
DIgetResult(factory, function, param,...)

Loading…
Cancel
Save