summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/cygwin/lib/perl5/5.10/TAP/Parser/Multiplexer.pm
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/cygwin/lib/perl5/5.10/TAP/Parser/Multiplexer.pm')
-rw-r--r--chromium/third_party/cygwin/lib/perl5/5.10/TAP/Parser/Multiplexer.pm192
1 files changed, 0 insertions, 192 deletions
diff --git a/chromium/third_party/cygwin/lib/perl5/5.10/TAP/Parser/Multiplexer.pm b/chromium/third_party/cygwin/lib/perl5/5.10/TAP/Parser/Multiplexer.pm
deleted file mode 100644
index b05c0b3a310..00000000000
--- a/chromium/third_party/cygwin/lib/perl5/5.10/TAP/Parser/Multiplexer.pm
+++ /dev/null
@@ -1,192 +0,0 @@
-package TAP::Parser::Multiplexer;
-
-use strict;
-use IO::Select;
-use vars qw($VERSION);
-
-use constant IS_WIN32 => $^O =~ /^(MS)?Win32$/;
-use constant IS_VMS => $^O eq 'VMS';
-use constant SELECT_OK => !( IS_VMS || IS_WIN32 );
-
-=head1 NAME
-
-TAP::Parser::Multiplexer - Multiplex multiple TAP::Parsers
-
-=head1 VERSION
-
-Version 3.10
-
-=cut
-
-$VERSION = '3.10';
-
-=head1 SYNOPSIS
-
- use TAP::Parser::Multiplexer;
-
- my $mux = TAP::Parser::Multiplexer->new;
- $mux->add( $parser1, $stash1 );
- $mux->add( $parser2, $stash2 );
- while ( my ( $parser, $stash, $result ) = $mux->next ) {
- # do stuff
- }
-
-=head1 DESCRIPTION
-
-C<TAP::Parser::Multiplexer> gathers input from multiple TAP::Parsers.
-Internally it calls select on the input file handles for those parsers
-to wait for one or more of them to have input available.
-
-See L<TAP::Harness> for an example of its use.
-
-=head1 METHODS
-
-=head2 Class Methods
-
-=head3 C<new>
-
- my $mux = TAP::Parser::Multiplexer->new;
-
-Returns a new C<TAP::Parser::Multiplexer> object.
-
-=cut
-
-sub new {
- my ($class) = @_;
- return bless {
- select => IO::Select->new,
- avid => [], # Parsers that can't select
- count => 0,
- }, $class;
-}
-
-##############################################################################
-
-=head2 Instance Methods
-
-=head3 C<add>
-
- $mux->add( $parser, $stash );
-
-Add a TAP::Parser to the multiplexer. C<$stash> is an optional opaque
-reference that will be returned from C<next> along with the parser and
-the next result.
-
-=cut
-
-sub add {
- my ( $self, $parser, $stash ) = @_;
-
- if ( SELECT_OK && ( my @handles = $parser->get_select_handles ) ) {
- my $sel = $self->{select};
-
- # We have to turn handles into file numbers here because by
- # the time we want to remove them from our IO::Select they
- # will already have been closed by the iterator.
- my @filenos = map { fileno $_ } @handles;
- for my $h (@handles) {
- $sel->add( [ $h, $parser, $stash, @filenos ] );
- }
-
- $self->{count}++;
- }
- else {
- push @{ $self->{avid} }, [ $parser, $stash ];
- }
-}
-
-=head3 C<parsers>
-
- my $count = $mux->parsers;
-
-Returns the number of parsers. Parsers are removed from the multiplexer
-when their input is exhausted.
-
-=cut
-
-sub parsers {
- my $self = shift;
- return $self->{count} + scalar @{ $self->{avid} };
-}
-
-sub _iter {
- my $self = shift;
-
- my $sel = $self->{select};
- my $avid = $self->{avid};
- my @ready = ();
-
- return sub {
-
- # Drain all the non-selectable parsers first
- if (@$avid) {
- my ( $parser, $stash ) = @{ $avid->[0] };
- my $result = $parser->next;
- shift @$avid unless defined $result;
- return ( $parser, $stash, $result );
- }
-
- unless (@ready) {
- return unless $sel->count;
-
- # TODO: Win32 doesn't do select properly on handles...
- @ready = $sel->can_read;
- }
-
- my ( $h, $parser, $stash, @handles ) = @{ shift @ready };
- my $result = $parser->next;
-
- unless ( defined $result ) {
- $sel->remove(@handles);
- $self->{count}--;
-
- # Force another can_read - we may now have removed a handle
- # thought to have been ready.
- @ready = ();
- }
-
- return ( $parser, $stash, $result );
- };
-}
-
-=head3 C<next>
-
-Return a result from the next available parser. Returns a list
-containing the parser from which the result came, the stash that
-corresponds with that parser and the result.
-
- my ( $parser, $stash, $result ) = $mux->next;
-
-If C<$result> is undefined the corresponding parser has reached the end
-of its input (and will automatically be removed from the multiplexer).
-
-When all parsers are exhausted an empty list will be returned.
-
- if ( my ( $parser, $stash, $result ) = $mux->next ) {
- if ( ! defined $result ) {
- # End of this parser
- }
- else {
- # Process result
- }
- }
- else {
- # All parsers finished
- }
-
-=cut
-
-sub next {
- my $self = shift;
- return ( $self->{_iter} ||= $self->_iter )->();
-}
-
-=head1 See Also
-
-L<TAP::Parser>
-
-L<TAP::Harness>
-
-=cut
-
-1;