File Coverage

blib/lib/Plucene/Index/SegmentMergeInfo.pm
Criterion Covered Total %
statement 26 31 83.8
branch 5 8 62.5
condition n/a
subroutine 8 9 88.8
pod 3 3 100.0
total 42 51 82.3


line stmt bran cond sub pod time code
1             package Plucene::Index::SegmentMergeInfo;
2              
3             # final class SegmentMergeInfo
4              
5             =head1 NAME
6              
7             Plucene::Index::SegmentMergeInfo - Segment Merge information
8              
9             =head1 SYNOPSIS
10              
11             my $seg_merge_info
12             = Plucene::Index::SegmentMergeInfo->new($b, $te, $r);
13              
14             $seg_merge_info->next;
15              
16             =head1 DESCRIPTION
17              
18             This is the Plucene::Index::SegmentMergeInfo class.
19              
20             =head1 METHODS
21              
22             =cut
23              
24 18     18   102 use strict;
  18         41  
  18         602  
25 18     18   121 use warnings;
  18         41  
  18         500  
26              
27 18     18   106 use Plucene::Index::SegmentTermPositions;
  18         38  
  18         187  
28              
29 18     18   611 use base 'Class::Accessor::Fast';
  18         39  
  18         2676  
30              
31             __PACKAGE__->mk_accessors(qw( base reader term_enum term postings doc_map));
32              
33             use overload cmp => sub {
34 6 100   6   161 $_[0]->{term} cmp $_[1]->{term}
35             || $_[0]->{base} <=> $_[1]->{base};
36             },
37 18     18   25542 fallback => 1;
  18         17117  
  18         234  
38              
39             =head2 new
40              
41             my $seg_merge_info = Plucene::Index::SegmentMergeInfo
42             ->new($base, Plucene::Index::TermEnum $te, $reader);
43              
44             This will create a new Plucene::Index::SegmentMergerInfo object.
45            
46             =head2 base / reader / term_enum / term / postings / doc_map
47              
48             Get / set these attributes.
49            
50             =cut
51              
52             # SegmentMergeInfo(int b, SegmentTermEnum te, SegmentReader r)
53             # throws IOException {
54             # base = b;
55             # reader = r;
56             # termEnum = te;
57             # term = te.term();
58             # postings = new SegmentTermPositions(r);
59             #
60             # if (reader.deletedDocs != null) {
61             # // build array which maps document numbers around deletions
62             # BitVector deletedDocs = reader.deletedDocs;
63             # int maxDoc = reader.maxDoc();
64             # docMap = new int[maxDoc];
65             # int j = 0;
66             # for (int i = 0; i < maxDoc; i++) {
67             # if (deletedDocs.get(i))
68             # docMap[i] = -1;
69             # else
70             # docMap[i] = j++;
71             # }
72             # }
73             # }
74              
75             sub new {
76 277     277 1 551 my ($class, $b, $te, $r) = @_;
77 277         964 my $self = $class->SUPER::new({
78             base => $b,
79             reader => $r,
80             term_enum => $te,
81             term => $te->term,
82             postings => Plucene::Index::SegmentTermPositions->new($r),
83             });
84              
85 277 50       4003 if (my $del = $r->deleted_docs) {
86 0         0 my $j;
87 0 0       0 $self->{doc_map} = [ map $del->get($_) ? -1 : $j++, 0 .. $r->max_doc ];
88             }
89 277         2050 return $self;
90             }
91              
92             =head2 next
93              
94             $seg_merge_info->next;
95              
96             =cut
97              
98             # final boolean next() throws IOException {
99             # if (termEnum.next()) {
100             # term = termEnum.term();
101             # return true;
102             # } else {
103             # term = null;
104             # return false;
105             # }
106             # }
107              
108             sub next {
109 33395     33395 1 43444 my $self = shift;
110 33395 100       95175 if ($self->{term_enum}->next) {
111 33121         102183 $self->{term} = $self->{term_enum}->term;
112 33121         223828 return 1;
113             } else {
114 274         813 undef $self->{term};
115 274         928 return;
116             }
117             }
118              
119             =head2 close
120              
121             $seg_merge_info->close;
122              
123             =cut
124              
125             # final void close() throws IOException {
126             # termEnum.close();
127             # postings.close();
128             # }
129              
130             sub close {
131 0     0 1   my $self = shift;
132 0           $self->term_enum->close;
133 0           $self->postings->close;
134             }
135              
136             1;