Module: sems Branch: sayer/dsm_lang Commit: d5ebf27e02cd8f4f09e8b022a126932e4e62893d URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=d5ebf27e02cd8f4f09e8b022a126932e4e62893d
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Tue Jan 25 19:54:29 2011 +0100 DSM: fix for ($bar in array) for structs Example: set($foo[0].a="a0"); set($foo[0].b="b0"); set($foo[1].a="a1"); set($foo[1].b="b1"); for ($bar in $foo) { log(1, $bar); } --- apps/dsm/DSMStateEngine.cpp | 20 +++++++++++++++----- 1 files changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/dsm/DSMStateEngine.cpp b/apps/dsm/DSMStateEngine.cpp index 2466bd3..d46b747 100644 --- a/apps/dsm/DSMStateEngine.cpp +++ b/apps/dsm/DSMStateEngine.cpp @@ -338,14 +338,24 @@ bool DSMStateEngine::runactions(vector<DSMElement*>::iterator from, } } else if (array_for->for_type == DSMArrayFor::Array) { unsigned int a_index = 0; - while (true) { - VarMapT::iterator v = sc_sess->var.find(array_name+"["+int2str(a_index)+"]"); - if (v == sc_sess->var.end()) - break; + VarMapT::iterator v = sc_sess-> + var.lower_bound(array_name+"["+int2str(a_index)+"]"); + + while (v != sc_sess->var.end()) { + string this_index = array_name+"["+int2str(a_index)+"]"; + if (v->first.substr(0, this_index.length()) != this_index) { + a_index++; + this_index = array_name+"["+int2str(a_index)+"]"; + if (v->first.substr(0, this_index.length()) != this_index) { + break; + } + } + cnt_values.push_back(make_pair(v->second, "")); DBG(" '%s'\n", v->second.c_str()); - a_index++; + v++; } + } // save counter k _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
