File Coverage

blib/lib/IO/AIO/LoadLimited.pm
Criterion Covered Total %
statement 32 33 96.9
branch 9 12 75.0
condition n/a
subroutine 6 6 100.0
pod 1 1 100.0
total 48 52 92.3


line stmt bran cond sub pod time code
1             package IO::AIO::LoadLimited;
2              
3 3     3   198065 use common::sense;
  3         37  
  3         14  
4 3     3   156 use base qw(Exporter);
  3         6  
  3         315  
5 3     3   17 use Carp qw(croak);
  3         7  
  3         138  
6              
7             # IO:AIO Version 2 supports groups and requests objects
8 3     3   532 use IO::AIO 2;
  3         3449  
  3         1613  
9              
10             our @EXPORT = qw(aio_load_limited);
11             our $VERSION = '0.02';
12              
13             sub aio_load_limited(\@&$;$) {
14 2     2 1 3666 my ($paths, $filecb, $grp_or_donecb, $limit) = @_;
15 2         5 my $group;
16              
17 2 100       8 $limit = 10 unless defined $limit;
18              
19 2 100       16 if (ref($grp_or_donecb) eq 'CODE') {
    50          
20 1         17 $group = aio_group $grp_or_donecb;
21             } elsif (ref($grp_or_donecb) eq 'IO::AIO::GRP') {
22 1         3 $group = $grp_or_donecb;
23             } else {
24 0         0 croak '3rd parameter must be a callback or IO::AIO::GRP';
25             }
26              
27 2         13 limit $group $limit;
28             feed $group sub {
29 1036     1036   9638 my $data;
30 1036 100       3338 my $path = shift @$paths or return $group->result(1);
31 1034         2740 my $pri = aioreq_pri;
32 1034 50       7280 my $grp = aio_group sub { $filecb->( $_[0] >= 0 ? ($path, $data) : ($path, undef) )};
  1034         4318  
33 1034         4034 add $group $grp;
34              
35 1034         2838 aioreq_pri $pri;
36             add $grp aio_open $path, IO::AIO::O_RDONLY, 0, sub {
37 1034 50       5439 my $fh = shift or return $grp->result(-1);
38 1034         3446 aioreq_pri $pri;
39 1034         53049 add $grp aio_read $fh, 0, (-s $fh), $data, 0, sub { $grp->result($_[0]) };
  1034         6462  
40 1034         54458 };
41 2         28 };
42             };
43              
44             1;
45              
46             __END__