+++: context code cleanup
authorMischa POSLAWSKY <perl@shiar.org>
Sun, 15 Nov 2009 00:08:04 +0000 (01:08 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Sun, 15 Nov 2009 00:08:04 +0000 (01:08 +0100)
lib/List/Index.pm

index 4ce9c25b8dacb38693302421c1f2692220ed669d..b11b5f86eeab9e88ebd0716e0739dd1cfdd9ca86 100644 (file)
@@ -24,15 +24,15 @@ sub ranges {
 
        $pagesize = @$self / $pages;
        my $offset = $pagesize + .5;
-       my $shrunk = 0;
-       my $enlarged = 0;
+       my $lookbehind = -$context;
+       my $lookahead  =  $context;
        my @links = ('');
        while ($offset < @$self) {
                my $link = substr $self->[$offset], 0, $length;
                if ($context) {
                        my $penalty = 0;
                        # take a value slightly before the current offset
-                       if ((my $before = $offset - $context + $shrunk) > 0) {
+                       if ((my $before = $offset + $lookbehind) > 0) {
                                # see how much of it matches the current link
                                my $trim = 1;
                                for my $match (split //, $self->[$before - 1]) {
@@ -49,9 +49,10 @@ sub ranges {
                                }
                        }
 
-                       $shrunk = 0;
+                       $lookbehind = -$context;
+
                        # take a value after the current offset
-                       if ((my $after = $offset + $context - $enlarged) < $#$self) {
+                       if ((my $after = $offset + $lookahead) < $#$self) {
                                # see how much of it matches the current link
                                my $trim = 1;
                                for my $match (split //, $self->[$after]) {
@@ -63,13 +64,14 @@ sub ranges {
                                        $link = substr $self->[$after], 0, $trim;
                                        # advance lookbehind offset on the next page
                                        $penalty = 0;
-                                       for ($offset .. $#$self) {
-                                               last if $self->[$offset + $shrunk] =~ /^\Q$link/;
-                                               $shrunk++;
+                                       for ($offset .. $after) {
+                                               last if $self->[$_] =~ /^\Q$link/;
+                                               $lookbehind++;
                                        }
                                }
                        }
-                       $enlarged = $penalty;
+
+                       $lookahead = $context - $penalty;
                }
 
                push @links, $link;