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

Reply via email to