introduce superclass for streams
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / CodeStream.pm
CommitLineData
456a815d 1package HTML::Zoom::CodeStream;
2
3use strict;
4use warnings FATAL => 'all';
5f74b883 5use base qw(HTML::Zoom::StreamBase);
456a815d 6
7sub from_array {
8 my ($class, @array) = @_;
9 $class->new({ code => sub {
10 return unless @array;
11 return shift @array;
12 }});
13}
14
15sub new {
16 my ($class, $args) = @_;
17 bless({ _code => $args->{code} }, $class);
18}
19
8f962884 20sub peek {
21 my ($self) = @_;
22 if (exists $self->{_peeked}) {
23 return ($self->{_peeked});
24 }
25 if (my ($peeked) = $self->next) {
26 return ($self->{_peeked} = $peeked);
27 }
28 return;
29}
30
456a815d 31sub next {
8f962884 32 my ($self) = @_;
33
34 # peeked entry so return that
35
36 if (exists $self->{_peeked}) {
37 return (delete $self->{_peeked});
38 }
39
40 $self->{_code}->();
456a815d 41}
42
431;
44