Checking in breakout of the various packages in DBM::Deep::Engine and documentation...
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep / Iterator / BucketList.pm
CommitLineData
f0276afb 1package DBM::Deep::Iterator::BucketList;
2
3use 5.006_000;
4
5use strict;
6use warnings FATAL => 'all';
7
8=head1 NAME
9
10DBM::Deep::Iterator::BucketList
11
12=head1 PURPOSE
13
14This is an internal-use-only object for L<DBM::Deep/>. It acts as the mediator
15between the L<DBM::Deep::Iterator/> object and a L<DBM::Deep::Engine::Sector::BucketList/>
16sector.
17
18=head1 OVERVIEW
19
20This object, despite the implied class hiearchy, does B<NOT> inherit from
21L<DBM::Deep::Iterator/>. Instead, it delegates to it, essentially acting as a
22facade over it. L<DBM::Deep::Iterator/get_next_key> will instantiate one of
23these objects as needed to handle an BucketList sector.
24
25=head1 METHODS
26
27=head2 new(\%params)
28
29The constructor takes a hashref of params and blesses it into the invoking class. The
30hashref is assumed to have the following elements:
31
32=over 4
33
34=item * iterator (of type L<DBM::Deep::Iterator/>
35
36=item * sector (of type L<DBM::Deep::Engine::Sector::BucketList/>
37
38=back
39
40=cut
41
42sub new {
43 my $self = bless $_[1] => $_[0];
44 $self->{curr_index} = 0;
45 return $self;
46}
47
48=head2 at_end()
49
50This takes no arguments.
51
52This returns true/false indicating whether this sector has any more elements that can be
53iterated over.
54
55=cut
56
57sub at_end {
58 my $self = shift;
59 return $self->{curr_index} >= $self->{iterator}{engine}->max_buckets;
60}
61
62=head2 get_next_iterator()
63
64This takes no arguments.
65
66This returns the next key pointed to by this bucketlist. This value is suitable for
67returning by FIRSTKEY or NEXTKEY().
68
69If the bucketlist is exhausted, it returns nothing.
70
71=cut
72
73sub get_next_key {
74 my $self = shift;
75
76 return if $self->at_end;
77
78 my $idx = $self->{curr_index}++;
79
80 my $data_loc = $self->{sector}->get_data_location_for({
81 allow_head => 1,
82 idx => $idx,
83 }) or return;
84
85 #XXX Do we want to add corruption checks here?
86 return $self->{sector}->get_key_for( $idx )->data;
87}
88
891;
90__END__