File Coverage

blib/lib/Data/Range/Compare/Stream/Iterator/Array.pm
Criterion Covered Total %
statement 62 62 100.0
branch 15 22 68.1
condition n/a
subroutine 17 17 100.0
pod 8 12 66.6
total 102 113 90.2


line stmt bran cond sub pod time code
1             package Data::Range::Compare::Stream::Iterator::Array;
2              
3 12     12   36146 use strict;
  12         26  
  12         472  
4 12     12   67 use warnings;
  12         81  
  12         371  
5 12     12   64 use Carp qw(croak);
  12         21  
  12         727  
6 12     12   67 use base qw(Data::Range::Compare::Stream::Iterator::Base);
  12         22  
  12         6947  
7 12     12   6234 use Data::Range::Compare::Stream::Sort;
  12         24  
  12         9654  
8              
9             sub new {
10 246     246 0 40719 my ($class,%args)=@_;
11              
12 246         1821 my $self=$class->SUPER::new(qw(
13             sorted 0
14             new_from Data::Range::Compare::Stream
15             ),
16             range_list=>[],%args
17             );
18              
19 246         5588 return $self;
20             }
21              
22 113     113 1 308 sub set_sorted { $_[0]->{sorted}=$_[1] }
23              
24 20472     20472 0 54444 sub sorted { $_[0]->{sorted} }
25              
26 10814     10814 0 30179 sub prepared { $_[0]->{prepared} }
27              
28             sub prepare {
29 241     241 1 346 my ($self)=@_;
30 241 50       444 return 1 if $self->prepared;
31              
32 241         585 $self->{prepared}=1;
33 241 100       509 return 1 if $self->sorted;
34 3 100       10 return 1 unless $self->{autosort};
35 2 50       23 return unless $self->can($self->{autosort});
36 2         5 my $func=$self->{autosort};
37 2         7 $self->$func();
38             }
39              
40             sub has_next {
41 10573     10573 0 15877 my ($self)=@_;
42 10573 100       23364 $self->prepare unless $self->prepared;
43 10573 100       22571 return undef unless $self->sorted;
44 10572         11339 return $#{$self->{range_list}}!=-1
  10572         51119  
45             }
46              
47             sub add_range {
48 407     407 1 589 my ($self,$range)=@_;
49 407 50       731 croak "Object: [$self] has all ready been sorted" if $self->sorted;
50 407         531 push @{$self->{range_list}},$range;
  407         2170  
51             }
52              
53             sub insert_range {
54 101     101 1 149 my ($self,$range)=@_;
55 101         115 push @{$self->{range_list}},$range;
  101         377  
56             }
57              
58             sub create_range {
59 393     393 1 2535 my ($self,@args)=@_;
60 393 50       956 croak "Object: [$self] has all ready been sorted" if $self->sorted;
61 393         1433 $self->add_range($self->create_from_factory(@args));
62             }
63              
64             sub get_next {
65 8747     8747 1 13141 my ($self)=@_;
66 8747 50       14812 croak "Object: [$self] has not been sorted" unless $self->sorted;
67 8747         8944 shift @{$self->{range_list}}
  8747         44367  
68             }
69              
70             sub prepare_for_consolidate_asc {
71 107     107 1 963 my ($self)=@_;
72 107 50       227 return 0 if $self->sorted;
73 107         310 $self->set_sorted(1);
74 107         291 @{$self->{range_list}}=sort sort_in_consolidate_order_asc @{$self->{range_list}};
  107         449  
  107         640  
75 107         296 1;
76             }
77              
78             sub prepare_for_consolidate_desc {
79 2     2 1 4 my ($self)=@_;
80 2 50       6 return 0 if $self->sorted;
81 2         7 $self->set_sorted(1);
82 2         4 @{$self->{range_list}}=sort sort_in_consolidate_order_desc @{$self->{range_list}};
  2         11  
  2         17  
83 2         6 1;
84             }
85              
86             1;