File Coverage

blib/lib/Sort/strverscmp/StringIterator.pm
Criterion Covered Total %
statement 33 40 82.5
branch 3 4 75.0
condition n/a
subroutine 11 13 84.6
pod 0 9 0.0
total 47 66 71.2


line stmt bran cond sub pod time code
1             package Sort::strverscmp::StringIterator;
2              
3 3     3   9 use Carp qw(croak);
  3         5  
  3         171  
4 3     3   29 use v5.10;
  3         6  
5              
6 3     3   9 use strict;
  3         4  
  3         58  
7 3     3   7 use warnings;
  3         4  
  3         707  
8              
9             sub new {
10 78     78 0 57 my $class = shift;
11 78         46 my $string = shift;
12              
13 78 50       103 unless ($string) {
14 0         0 croak 'invalid string';
15             }
16              
17 78         64 my $o = {};
18 78         77 $o->{pos} = 0;
19 78         70 $o->{string} = $string;
20 78         50 $o->{len} = length($string);
21              
22 78         125 return bless $o, $class;
23             }
24              
25             sub pos {
26 1289     1289 0 744 my $self = shift;
27 1289         2148 return $self->{pos};
28             }
29              
30             sub string {
31 691     691 0 442 my $self = shift;
32 691         714 return $self->{string};
33             }
34              
35             sub len {
36 598     598 0 351 my $self = shift;
37 598         615 return $self->{len};
38             }
39              
40             sub head {
41 598     598 0 381 my $self = shift;
42 598 100       497 if ($self->pos >= $self->len) {
43 3         30 return;
44             } else {
45 595         501 return substr($self->string, $self->pos, 1);
46             }
47             }
48              
49             sub tail {
50 96     96 0 63 my $self = shift;
51 96         106 return substr($self->string, $self->pos + 1);
52             }
53              
54             sub tail_len {
55 0     0 0 0 my $self = shift;
56 0         0 return ($self->len - $self->pos);
57             }
58              
59             sub advance {
60 170     170 0 121 my $self = shift;
61 170         193 $self->{pos}++;
62             }
63              
64             sub next {
65 0     0 0   my $self = shift;
66 0           my $head = $self->head();
67 0           $self->advance();
68 0           return $head;
69             }
70              
71             1;