From: Brandon L Black Date: Wed, 8 Nov 2006 06:09:20 +0000 (+0000) Subject: revert accidental commit of konobi test patch :) X-Git-Tag: 0.06~14 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5a07d0494d7d409ba0fe5062d584f63200bd895b;p=gitmo%2FAlgorithm-C3.git revert accidental commit of konobi test patch :) --- diff --git a/lib/Algorithm/C3.pm b/lib/Algorithm/C3.pm index 3c75335..be88dc5 100644 --- a/lib/Algorithm/C3.pm +++ b/lib/Algorithm/C3.pm @@ -54,37 +54,30 @@ sub merge { # http://www.python.org/2.3/mro.html :) # Initial set (make sure everything is copied - it will be modded) - my (@seqs, %tails); - for my $d (@$recurse_mergeout, $current_parents){ - if(@$d){ - push @seqs, [@$d]; - # Construct the tail-checking hash - $tails{$_}++ for (@$d[1..$#$d]); - } + my @seqs = map { [@$_] } (@$recurse_mergeout, $current_parents); + + # Construct the tail-checking hash + my %tails; + foreach my $seq (@seqs) { + $tails{$_}++ for (@$seq[1..$#$seq]); } my @res = ( $current_root ); while (1) { - my ($cand, $winner); - my $j = 0; + my $cand; + my $winner; foreach (@seqs) { - $j++; - if(!@$_){ - splice @seqs, $j, 1; - next; - } - - if(!$winner){ - next if $tails{ $cand = $_->[0] }; - push(@res, $winner = $cand); + next if !@$_; + if(!$winner) { # looking for a winner + $cand = $_->[0]; # seq head is candidate + next if $tails{$cand}; # he loses if in %tails + push @res => $winner = $cand; } - if($_->[0] eq $winner) { shift @$_; # strip off our winner - $tails{ $_->[0] }-- if @$_; # keep %tails sane + $tails{$_->[0]}-- if @$_; # keep %tails sane } } - last if !$cand; die q{Inconsistent hierarchy found while merging '} . $current_root . qq{':\n\t} @@ -317,4 +310,3 @@ This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut -