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

Reply via email to