File Coverage

blib/lib/Search/Tools/TokenListPP.pm
Criterion Covered Total %
statement 36 45 80.0
branch 7 12 58.3
condition n/a
subroutine 12 15 80.0
pod 10 10 100.0
total 65 82 79.2


line stmt bran cond sub pod time code
1             package Search::Tools::TokenListPP;
2 2     2   35 use Moo;
  2         27  
  2         14  
3             extends 'Search::Tools::Object';
4             use overload
5 3     3   689 '""' => sub { $_[0]->str; },
6 8     8   697 'bool' => sub { $_[0]->len; },
7 2     2   879 fallback => 1;
  2         7  
  2         21  
8 2     2   167 use Carp;
  2         5  
  2         1356  
9             with 'Search::Tools::TokenListUtils';
10              
11             our $VERSION = '1.007';
12              
13             has 'pos' => ( is => 'rw' );
14             has 'num' => ( is => 'rw' );
15              
16             sub len {
17 16     16 1 7242 return scalar @{ $_[0]->{tokens} };
  16         83  
18             }
19              
20             sub get_heat {
21 2     2 1 72 return $_[0]->{heat};
22             }
23              
24             sub next {
25 200     200 1 472 my $self = shift;
26 200         435 my $tokens = $self->{tokens};
27 200         427 my $len = scalar(@$tokens) - 1;
28 200 50       782 if ( $len == -1 ) {
    100          
29 0         0 return;
30             }
31             elsif ( $self->{pos} > $len ) {
32 6         28 return;
33             }
34             else {
35 194         692 return $tokens->[ $self->{pos}++ ];
36             }
37             }
38              
39             sub prev {
40 6     6 1 19 my $self = shift;
41 6         18 my $tokens = $self->{tokens};
42 6         18 my $len = scalar(@$tokens) - 1;
43 6 50       31 if ( $len == -1 ) {
    50          
44 0         0 return;
45             }
46             elsif ( $self->{pos} < 0 ) {
47 0         0 return;
48             }
49             else {
50 6         37 return $tokens->[ --$self->{pos} ];
51             }
52             }
53              
54             sub reset {
55 0     0 1 0 $_[0]->{pos} = 0;
56             }
57              
58             sub set_pos {
59 0     0 1 0 $_[0]->{pos} = $_[1];
60             }
61              
62             sub get_token {
63 62     62 1 137 my $self = shift;
64 62         126 my $len = scalar( @{ $self->{tokens} } ) - 1;
  62         160  
65 62         154 my $i = shift;
66 62 50       175 if ( !defined $i ) {
67 0         0 croak "index position required";
68             }
69 62 50       179 if ( !defined $self->{tokens}->[$i] ) {
70 0         0 return;
71             }
72             else {
73 62         276 return $self->{tokens}->[$i];
74             }
75             }
76              
77             sub as_array {
78 14     14 1 61 return $_[0]->{tokens};
79             }
80              
81             sub matches {
82 6     6 1 16 return [ grep { $_->{is_match} } @{ $_[0]->{tokens} } ];
  188         341  
  6         28  
83             }
84              
85             sub num_matches {
86 0     0 1   return scalar @{ shift->matches };
  0            
87             }
88              
89             1;
90              
91             __END__