[padb-devel] [padb] r199 committed - Convert make_tree to use the rng_ functions rather than arrays for pas...
codesite-noreply at google.com
codesite-noreply at google.com
Mon Sep 7 14:09:29 BST 2009
Revision: 199
Author: apittman
Date: Mon Sep 7 06:09:03 2009
Log: Convert make_tree to use the rng_ functions rather than arrays for
passing around lists of ranks.
http://code.google.com/p/padb/source/detail?r=199
Modified:
/branches/cleanup/src/padb
=======================================
--- /branches/cleanup/src/padb Mon Sep 7 05:35:03 2009
+++ /branches/cleanup/src/padb Mon Sep 7 06:09:03 2009
@@ -1912,36 +1912,38 @@
# hash containing the "txt" of the function name and a further array
# of hash references called "children".
sub _make_tree {
- my ( $level, $lines, @tags ) = @_;
+ my ( $level, $lines, $trange ) = @_;
my @peers;
my $prev;
- my $tag = shift @tags;
-
- debug_log( 'tree', \@tags, 'called tag:%s, level:%d', $tag, $level );
+ my $tag = rng_shift($trange);
+
+ debug_log( 'tree', undef, 'called tag:%s, level:%d tags %s',
+ $tag, $level, rng_convert_to_user($trange) );
return if ( !defined($tag) );
return if ( !defined( $lines->{$tag} ) );
my @identical;
- my @different;
+ my $different_rng;
my $endlevel = $level;
# Populate the two lists, @identical and @different
my $line = $lines->{$tag}[$level];
if ( defined $line ) {
- foreach my $tag2 (@tags) {
+ $different_rng = rng_create_empty();
+ while ( defined( my $tag2 = rng_shift($trange) ) ) {
if ( defined( $lines->{$tag2}[$level] )
and $line eq $lines->{$tag2}[$level] )
{
push @identical, $tag2;
} else {
- push @different, $tag2;
+ rng_add_value( $different_rng, $tag2 );
}
}
} else {
- @different = @tags;
+ $different_rng = $trange;
}
# Move $endlevel on as far as we can...
@@ -1971,9 +1973,11 @@
}
debug_log(
- 'tree', undef,
-
-"level $level, endlevel $endlevel, identical:@identical
different:@different"
+ 'tree',
+ undef,
+ "level $level, endlevel $endlevel, identical:%s different: %s",
+ rng_convert_to_user( rng_create_from_array(@identical) ),
+ rng_convert_to_user($different_rng)
);
for ( my $l = $level ; $l <= $endlevel ; $l++ ) {
@@ -2005,17 +2009,20 @@
unshift @identical, $tag;
}
- $prev->{children} = _make_tree( $endlevel + 1, $lines, @identical
);
+ my $r = rng_create_from_array(@identical);
+ $prev->{children} = _make_tree( $endlevel + 1, $lines, $r );
}
debug_log(
- 'tree', undef,
-
-"returning level:$level endlevel:$endlevel identical:@identical
different:@different"
+ 'tree',
+ undef,
+ "returning level:$level endlevel:$endlevel identical:%s
different: %s",
+ rng_convert_to_user( rng_create_from_array(@identical) ),
+ rng_convert_to_user($different_rng)
);
- if (@different) {
- my $new = _make_tree( $level, $lines, @different );
+ if ( not rng_empty($different_rng) ) {
+ my $new = _make_tree( $level, $lines, $different_rng );
push @peers, ( @{$new} );
}
@@ -2025,7 +2032,8 @@
# Convert the rank output into a tree based form suitable for use with
show_tree.
sub make_tree {
my ($lines) = @_;
- return _make_tree( 0, $lines, ( sort { $a <=> $b } ( keys %$lines ) )
);
+ my $rng = rng_create_from_array( keys(%$lines) );
+ return _make_tree( 0, $lines, $rng );
}
# Takes a ref to a array of hashes...
More information about the padb-devel
mailing list