File Coverage

blib/lib/Queue/Q/ClaimFIFO/Perl.pm
Criterion Covered Total %
statement 73 75 97.3
branch 5 8 62.5
condition 4 8 50.0
subroutine 17 17 100.0
pod 8 10 80.0
total 107 118 90.6


line stmt bran cond sub pod time code
1             package Queue::Q::ClaimFIFO::Perl;
2 3     3   86420 use strict;
  3         16  
  3         80  
3 3     3   15 use warnings;
  3         5  
  3         76  
4              
5 3     3   1217 use Queue::Q::ClaimFIFO;
  3         8  
  3         78  
6 3     3   651 use parent 'Queue::Q::ClaimFIFO';
  3         295  
  3         24  
7              
8 3     3   172 use Carp qw(croak);
  3         5  
  3         147  
9 3     3   16 use Scalar::Util qw(refaddr blessed);
  3         5  
  3         231  
10              
11             # Note: items are generally Queue::Q::ClaimFIFO::Item's
12 3     3   17 use Queue::Q::ClaimFIFO::Item;
  3         5  
  3         2107  
13              
14             sub new {
15 6     6 0 626 my $class = shift;
16 6         41 my $self = bless {
17             @_,
18             queue => [],
19             claimed => {},
20             } => $class;
21 6         25 return $self;
22             }
23              
24             # enqueue_item($single_item)
25             sub enqueue_item {
26 116     116 1 2187 my $self = shift;
27 116         164 my $item = shift;
28              
29 116 50 33     337 if (blessed($item) and $item->isa("Queue::Q::ClaimFIFO::Item")) {
30 0         0 croak("Don't pass a Queue::Q::ClaimFIFO::Item object to enqueue_item: "
31             . "Your data structure will be wrapped in one");
32             }
33              
34 116         365 $item = Queue::Q::ClaimFIFO::Item->new(item_data => $item);
35 116         153 push @{$self->{queue}}, $item;
  116         254  
36              
37 116         403 return $item;
38             }
39              
40             # enqueue_items(@list_of_items)
41             sub enqueue_items {
42 4     4 1 513 my $self = shift;
43              
44 4         6 my @items;
45 4         9 for my $item (@_) {
46 41 50 33     117 if (blessed($item) and $item->isa("Queue::Q::ClaimFIFO::Item")) {
47 0         0 croak("Don't pass a Queue::Q::ClaimFIFO::Item object to enqueue_items: "
48             . "Your data structure will be wrapped in one");
49             }
50 41         133 push @items, Queue::Q::ClaimFIFO::Item->new(item_data => $item);
51             }
52              
53 4         7 push @{$self->{queue}}, @items;
  4         17  
54 4         16 return @items;
55             }
56              
57             # my $item_or_undef = claim_item()
58             sub claim_item {
59 63     63 1 7211 my $self = shift;
60 63         79 my $item = shift @{ $self->{queue} };
  63         136  
61 63 100       197 return undef if not $item;
62 34         136 $self->{claimed}{refaddr($item)} = $item;
63 34         82 return $item;
64             }
65              
66             # my (@items_or_undefs) = claim_items($n)
67             sub claim_items {
68 12     12 1 1436 my $self = shift;
69 12   100     36 my $n = shift || 1;
70              
71 12         18 my @items = splice(@{ $self->{queue} }, 0, $n);
  12         38  
72              
73 12         21 my $cl = $self->{claimed};
74 12         27 for (@items) {
75 23         80 $cl->{refaddr($_)} = $_;
76             }
77              
78 12         42 return @items;
79             }
80              
81             # mark_item_as_done($item_previously_claimed)
82             sub mark_item_as_done {
83 50     50 1 2511 my $self = shift;
84 50         83 my $item = shift;
85 50         183 delete $self->{claimed}{refaddr($item)};
86 50         134 return 1;
87             }
88              
89             # mark_item_as_done(@items_previously_claimed)
90             sub mark_items_as_done {
91 1     1 1 478 my $self = shift;
92              
93 1         4 foreach (@_) {
94 8 50       18 next if not defined $_;
95 8         23 delete $self->{claimed}{refaddr($_)};
96             }
97              
98 1         3 return 1;
99             }
100              
101             sub flush_queue {
102 11     11 1 1270 my $self = shift;
103 11         20 @{ $self->{queue} } = ();
  11         70  
104 11         20 %{ $self->{claimed} } = ();
  11         53  
105             }
106              
107             # my $nitems = queue_length()
108             sub queue_length {
109 76     76 1 10722 my $self = shift;
110 76         100 return scalar( @{ $self->{queue} } );
  76         325  
111             }
112              
113             # my $nclaimed_items = claimed_count()
114             sub claimed_count {
115 66     66 0 105 my $self = shift;
116 66         89 return scalar( keys %{ $self->{claimed} } );
  66         267  
117             }
118              
119             1;
120             __END__