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