Module: sems Branch: sayer/dsm_lang Commit: dd467a96ef4b0d7543613b1f50763efb9973c45e URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=dd467a96ef4b0d7543613b1f50763efb9973c45e
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Thu Jan 27 02:11:31 2011 +0100 DSM: size($arrayname, $dst) action size($arrayname, $dst); set variable $dst to size of array (e.g. $arrayname[0], $arrayname[1] set, $dst set to 2) --- apps/dsm/DSMCoreModule.cpp | 26 ++++++++++++++++++++++++++ apps/dsm/DSMCoreModule.h | 1 + doc/dsm/dsm_syntax.txt | 4 ++++ 3 files changed, 31 insertions(+), 0 deletions(-) diff --git a/apps/dsm/DSMCoreModule.cpp b/apps/dsm/DSMCoreModule.cpp index 107ec85..3de108c 100644 --- a/apps/dsm/DSMCoreModule.cpp +++ b/apps/dsm/DSMCoreModule.cpp @@ -86,6 +86,7 @@ DSMAction* DSMCoreModule::getAction(const string& from_str) { DEF_CMD("log", SCLogAction); DEF_CMD("clear", SCClearAction); DEF_CMD("clearArray", SCClearArrayAction); + DEF_CMD("size", SCSizeAction); DEF_CMD("logVars", SCLogVarsAction); DEF_CMD("logParams", SCLogParamsAction); DEF_CMD("logSelects", SCLogSelectsAction); @@ -691,6 +692,31 @@ EXEC_ACTION_START(SCClearArrayAction) { } EXEC_ACTION_END; +CONST_ACTION_2P(SCSizeAction, ',', false); +EXEC_ACTION_START(SCSizeAction) { + string array_name = par1; + if (array_name.length() && array_name[0]=='$') + array_name.erase(0,1); + + string dst_name = par2; + if (dst_name.length()&&dst_name[0]=='$') + dst_name.erase(0,1); + + + unsigned int a_size = 0; + while (true) { + string ai_name = array_name+"["+int2str(a_size)+"]"; + VarMapT::iterator lb = sc_sess->var.lower_bound(ai_name); + if (lb == sc_sess->var.end() || + lb->first.substr(0,ai_name.length()) != ai_name) + break; + a_size++; + } + string res = int2str(a_size); + sc_sess->var[dst_name] = res; + DBG("set $%s=%s\n", dst_name.c_str(), res.c_str()); +} EXEC_ACTION_END; + CONST_ACTION_2P(SCAppendAction,',', false); EXEC_ACTION_START(SCAppendAction) { diff --git a/apps/dsm/DSMCoreModule.h b/apps/dsm/DSMCoreModule.h index 67a3d3c..c00c258 100644 --- a/apps/dsm/DSMCoreModule.h +++ b/apps/dsm/DSMCoreModule.h @@ -84,6 +84,7 @@ DEF_ACTION_2P(SCSubStrAction); DEF_ACTION_1P(SCIncAction); DEF_ACTION_1P(SCClearAction); DEF_ACTION_1P(SCClearArrayAction); +DEF_ACTION_2P(SCSizeAction); DEF_ACTION_2P(SCSetTimerAction); DEF_ACTION_1P(SCRemoveTimerAction); DEF_ACTION_1P(SCRemoveTimersAction); diff --git a/doc/dsm/dsm_syntax.txt b/doc/dsm/dsm_syntax.txt index 7acfd63..162b5d9 100644 --- a/doc/dsm/dsm_syntax.txt +++ b/doc/dsm/dsm_syntax.txt @@ -145,6 +145,10 @@ sendDTMFSequence(sequence [, duration_ms]) append($var, @select); append($var, $var2); substr($var, pos) e.g. substr($myvar, 5); + + size($arrayname, $dst); + set variable $dst to size of array + (e.g. $arrayname[0], $arrayname[1] set, $dst set to 2) inc($var) clear($var) _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
