Module: sems
Branch: master
Commit: defb278eb1d4ed18655977aabefcc72840d929b4
URL: 
https://github.com/sems-server/sems/commit/defb278eb1d4ed18655977aabefcc72840d929b4

Author: Stefan Sayer <stefan.sa...@googlemail.com>
Committer: Stefan Sayer <stefan.sa...@googlemail.com>
Date: 2015-06-09T00:25:37+02:00

dsm: clearArray and clearStruct actions

---

Modified: apps/dsm/DSMCoreModule.cpp
Modified: apps/dsm/DSMCoreModule.h
Modified: doc/dsm/dsm_syntax.txt

---

Diff:  
https://github.com/sems-server/sems/commit/defb278eb1d4ed18655977aabefcc72840d929b4.diff
Patch: 
https://github.com/sems-server/sems/commit/defb278eb1d4ed18655977aabefcc72840d929b4.patch

---

diff --git a/apps/dsm/DSMCoreModule.cpp b/apps/dsm/DSMCoreModule.cpp
index 5b4999a..f97ff23 100644
--- a/apps/dsm/DSMCoreModule.cpp
+++ b/apps/dsm/DSMCoreModule.cpp
@@ -102,6 +102,7 @@ DSMAction* DSMCoreModule::getAction(const string& from_str) 
{
   DEF_CMD("warn", SCWarnAction);
   DEF_CMD("error", SCErrorAction);
   DEF_CMD("clear", SCClearAction);
+  DEF_CMD("clearStruct", SCClearStructAction);
   DEF_CMD("clearArray", SCClearArrayAction);
   DEF_CMD("size", SCSizeAction);
   DEF_CMD("logVars", SCLogVarsAction);
@@ -855,10 +856,10 @@ EXEC_ACTION_START(SCClearAction) {
   sc_sess->var.erase(var_name);
 } EXEC_ACTION_END;
 
-EXEC_ACTION_START(SCClearArrayAction) {
+EXEC_ACTION_START(SCClearStructAction) {
   string varprefix = (arg.length() && arg[0] == '$')?
     arg.substr(1) : arg;
-  DBG("clear variable array '%s.*'\n", varprefix.c_str());
+  DBG("clear variable struct '%s.*'\n", varprefix.c_str());
 
   varprefix+=".";
 
@@ -874,6 +875,27 @@ EXEC_ACTION_START(SCClearArrayAction) {
 
 } EXEC_ACTION_END;
 
+
+EXEC_ACTION_START(SCClearArrayAction) {
+  string varprefix = (arg.length() && arg[0] == '$')?
+    arg.substr(1) : arg;
+  DBG("clear variable array '%s[*'\n", varprefix.c_str());
+
+  varprefix+="[";
+
+  VarMapT::iterator lb = sc_sess->var.lower_bound(varprefix);
+  while (lb != sc_sess->var.end()) {
+    if ((lb->first.length() < varprefix.length()) ||
+       strncmp(lb->first.c_str(), varprefix.c_str(),varprefix.length()))
+      break;
+    // fixme: check whether it's really an array index
+    VarMapT::iterator lb_d = lb;
+    lb++;
+    sc_sess->var.erase(lb_d);
+  }
+
+} EXEC_ACTION_END;
+
 CONST_ACTION_2P(SCSizeAction, ',', false);
 EXEC_ACTION_START(SCSizeAction) {
   string array_name = par1;
diff --git a/apps/dsm/DSMCoreModule.h b/apps/dsm/DSMCoreModule.h
index 0e1b0a0..ea8a3ad 100644
--- a/apps/dsm/DSMCoreModule.h
+++ b/apps/dsm/DSMCoreModule.h
@@ -92,6 +92,7 @@ DEF_ACTION_2P(SCAppendAction);
 DEF_ACTION_2P(SCSubStrAction);
 DEF_ACTION_1P(SCIncAction);
 DEF_ACTION_1P(SCClearAction);
+DEF_ACTION_1P(SCClearStructAction);
 DEF_ACTION_1P(SCClearArrayAction);
 DEF_ACTION_2P(SCSizeAction);
 DEF_ACTION_2P(SCSetTimerAction);
diff --git a/doc/dsm/dsm_syntax.txt b/doc/dsm/dsm_syntax.txt
index 59b9d59..b05f0bf 100644
--- a/doc/dsm/dsm_syntax.txt
+++ b/doc/dsm/dsm_syntax.txt
@@ -106,9 +106,12 @@ DSM flow
 
  inc($var)
  clear($var)
- clearArray($var)
+ clearStruct($var)
   clears all var.* variables
+ clearArray($var)
+  clears all var[* variables 
 
+ 
 Playing prompts and file I/O
 ----------------------------
 

_______________________________________________
Semsdev mailing list
Semsdev@lists.iptel.org
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to