git.shiar.nl
/
perl
/
list-index.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
limit $offset scope
[perl/list-index.git]
/
lib
/
List
/
Index.pm
diff --git
a/lib/List/Index.pm
b/lib/List/Index.pm
index 4ce9c25b8dacb38693302421c1f2692220ed669d..f703d974ebabfdea316db90cd5764c2a9bea45f2 100644
(file)
--- a/
lib/List/Index.pm
+++ b/
lib/List/Index.pm
@@
-22,17
+22,17
@@
sub ranges {
my $length = $options->{length } || 4;
my $pages = $options->{pages } || 1 + int $#$self / $pagesize;
my $length = $options->{length } || 4;
my $pages = $options->{pages } || 1 + int $#$self / $pagesize;
- $pagesize = @$self / $pages;
- my $
offset = $pagesize + .5
;
- my $
shrunk = 0
;
- my $enlarged = 0;
+ $pagesize =
$pages >= $#$self ? 1 :
@$self / $pages;
+ my $
lookbehind = -$context
;
+ my $
lookahead = $context
;
+
my @links = ('');
my @links = ('');
-
while ($offset < @$self
) {
+
for (my $offset = $pagesize + .5; $offset < @$self; $offset += $pagesize
) {
my $link = substr $self->[$offset], 0, $length;
if ($context) {
my $penalty = 0;
# take a value slightly before the current offset
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]) {
# 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
# take a value after the current offset
- if ((my $after = $offset + $
context - $enlarge
d) < $#$self) {
+ if ((my $after = $offset + $
lookahea
d) < $#$self) {
# see how much of it matches the current link
my $trim = 1;
for my $match (split //, $self->[$after]) {
# see how much of it matches the current link
my $trim = 1;
for my $match (split //, $self->[$after]) {
@@
-63,17
+64,17
@@
sub ranges {
$link = substr $self->[$after], 0, $trim;
# advance lookbehind offset on the next page
$penalty = 0;
$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;
}
push @links, $link;
- $offset += $pagesize;
}
use List::MoreUtils 'uniq';
}
use List::MoreUtils 'uniq';