| Data-Stream-Bulk documentation | Contained in the Data-Stream-Bulk distribution. |
Data::Stream::Bulk::Cat - Concatenated streams
use Data::Stream::Bulk::Cat;
Data::Stream::Bulk::Cat->new(
streams => [ $s1, $s2, $s3 ],
);
This stream is a concatenation of several other streams.
Returns true if the list of streams is empty.
Returns the next block from the next ready stream.
Breaks down the internal list of streams, and delegates list_cat to the
first one.
Has the effect of inlining the nested streams into the total concatenation, allowing list_cat in Data::Stream::Bulk::Array to work better.
Yuval Kogman <nothingmuch@woobling.org>
This software is copyright (c) 2010 by Yuval Kogman.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| Data-Stream-Bulk documentation | Contained in the Data-Stream-Bulk distribution. |
package Data::Stream::Bulk::Cat; BEGIN { $Data::Stream::Bulk::Cat::AUTHORITY = 'cpan:NUFFIN'; } BEGIN { $Data::Stream::Bulk::Cat::VERSION = '0.08'; } # ABSTRACT: Concatenated streams use Moose; use namespace::clean -except => 'meta'; with qw(Data::Stream::Bulk) => { -excludes => 'list_cat' }; has streams => ( isa => "ArrayRef[Data::Stream::Bulk]", is => "ro", required => 1, ); sub is_done { my $self = shift; @{ $self->streams } == 0; } sub next { my $self = shift; my $s = $self->streams; return unless @$s; my $next; until ( $next = @$s && $s->[0]->next ) { shift @$s; return unless @$s; } return $next; } sub list_cat { my ( $self, @rest ) = @_; my ( $head, @tail ) = ( @{ $self->streams }, @rest ); return () unless $head; return $head->list_cat(@tail); } __PACKAGE__->meta->make_immutable; __PACKAGE__; __END__