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