using openser 1.3, is there a way to get a count of how many items there are in an avp variable other than: while ( is_avp_set("$avp(s:fork_uri)") ) { $var(fork_uri_count) = $var(fork_uri_count) + 1 ; avp_copy("$avp(s:fork_uri)", "$avp(s:fork_uri_rev_order)/d") ; } then if you wanted things in the same order as they were originally you would also have to: while ( is_avp_set("$avp(s:fork_uri_rev_order)") ) { avp_copy("$avp(s:fork_uri_rev_order)", "$avp(s:fork_uri)/d") ; }
talk about an expensive counting
Several ways I could see this implimented: New function avp_count("$avp(s:myvar)", "$avp(s:count_result)") or avp_count("$avp(s:myvar)") where $rc contains the result. is_avp_set("$avp(s:myvar)") where $rc is set to the count, probably best as you could test if exitst and the go right to processing. avp_check("$avp(s:myvar)", "cn/g") where $rc is set to the count. It could always set $rc to count of found matches for when the g flag is used. Of course using $rc for is_avp_set() or avp_check() depends on if setting that to non-zero makes a test like if( is_avp_set("$avp(s:myvar)") ) always trigger as false.
also on getting a count ...
another place I need to get a count is how many times a character(s) (or shoot the moon, a regex) occurs in a string. for handeling things like transformations like {s.select,index,seperator}, eg: $(var(findme){ s.select,$var(count),,}) sidenote ... (not sure what values for seperator are valid) a transformation like {s.count,seperator}
Here is an example of something I was trying to do that would have benifited from knowing the count of seperator. I think that I got a warning or error when the test for the while indexed past the end of the string.
xlog("L_INFO", "Original findme list to parse: $avp(s:findme)\n"); if ( $avp(s:findme) =~ "|" ) { $var(findme) = $(avp(s:findme){s.select,0,|}) ; $var(findme_tm_out) = $(avp(s:findme){s.select,1,|}) ; xlog("L_INFO", "This findme has a timeout: $var(findme_tm_out)\n"); } else { $var(findme) = $avp(s:findme) ; } xlog("L_INFO", "findme list to parse: $var(findme)\n"); $var(findme_cnt) = 0 ; while ($(var(findme){s.select,$var(findme_cnt),,}{s.len }) > 0 ) { xlog("L_INFO", "Loop $var(findme_cnt), Adding $(var(findme){s.select,$var(findme_cnt),,}) to TO_list\n"); $avp(s:TO_list) = $(var(findme){s.select,$var(findme_cnt),,}) ; $var(findme_cnt) = $var(findme_cnt) + 1 ; }
can/do $var()'s stack like $avp()'s?
Thanks Dave