File: | lib/List/Enumerator/Sub.pm |
Coverage: | 90.5% |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package List::Enumerator::Sub; | ||||||
2 | 5 5 5 | 22 7 29 | use base qw/List::Enumerator::Role/; | ||||
3 | use overload | ||||||
4 | 5 5 5 | 28 7 69 | '@{}' => \&getarray; | ||||
5 | |||||||
6 | __PACKAGE__->mk_accessors(qw/next_sub rewind_sub/); | ||||||
7 | |||||||
8 | sub BUILD { | ||||||
9 | 95 | 0 | 166 | my ($self, $params) = @_; | |||
10 | |||||||
11 | 95 | 335 | $self->next_sub($params->{next}); | ||||
12 | 95 0 | 1167 0 | $self->rewind_sub($params->{rewind} || sub {}); | ||||
13 | } | ||||||
14 | |||||||
15 | sub _next { | ||||||
16 | 848 | 1115 | my ($self, $new) = @_; | ||||
17 | |||||||
18 | 848 | 978 | local $_ = $self; | ||||
19 | 848 | 2284 | $self->next_sub->($self); | ||||
20 | } | ||||||
21 | |||||||
22 | sub _rewind { | ||||||
23 | 14 | 26 | my ($self, $new) = @_; | ||||
24 | |||||||
25 | 14 | 26 | local $_ = $self; | ||||
26 | 14 | 45 | $self->rewind_sub->($self); | ||||
27 | 14 | 33 | $self; | ||||
28 | } | ||||||
29 | |||||||
30 | sub getarray { | ||||||
31 | 1 | 0 | 3 | my ($self) = @_; | |||
32 | 1 | 2 | my @temp; | ||||
33 | 1 | 0 | tie @temp, __PACKAGE__, $self; | ||||
34 | 1 | 4 | \@temp; | ||||
35 | } | ||||||
36 | |||||||
37 | sub TIEARRAY { | ||||||
38 | 1 | 3 | my ($class, $arg) = @_; | ||||
39 | 1 | 3 | bless $arg, $class; | ||||
40 | } | ||||||
41 | |||||||
42 | sub FETCHSIZE { | ||||||
43 | 1 | 4 | 0; | ||||
44 | } | ||||||
45 | |||||||
46 | sub FETCH { #TODO orz orz orz | ||||||
47 | 1 | 3 | my ($self, $index) = @_; | ||||
48 | 1 | 7 | $self->rewind; | ||||
49 | 1 | 12 | $self->next while ($index--); | ||||
50 | 1 | 3 | $self->next; | ||||
51 | } | ||||||
52 | |||||||
53 | 1; |