DBM::Deep::Iterator::File::Index - DBM::Deep::Iterator::File::Index documentation


DBM-Deep documentation Contained in the DBM-Deep distribution.

Index


Code Index:

NAME

Top

DBM::Deep::Iterator::Index

PURPOSE

Top

This is an internal-use-only object for DBM::Deep. It acts as the mediator between the DBM::Deep::Iterator object and a DBM::Deep::Engine::Sector::Index sector.

OVERVIEW

Top

This object, despite the implied class hiearchy, does NOT inherit from DBM::Deep::Iterator. Instead, it delegates to it, essentially acting as a facade over it. get_next_key in DBM::Deep::Iterator will instantiate one of these objects as needed to handle an Index sector.

METHODS

Top

new(\%params)

The constructor takes a hashref of params and blesses it into the invoking class. The hashref is assumed to have the following elements:

* iterator (of type DBM::Deep::Iterator
* sector (of type DBM::Deep::Engine::Sector::Index

at_end()

This takes no arguments.

This returns true/false indicating whether this sector has any more elements that can be iterated over.

get_next_iterator()

This takes no arguments.

This returns an iterator (built by get_sector_iterator in DBM::Deep::Iterator) based on the sector pointed to by the next occupied location in this index.

If the sector is exhausted, it returns nothing.


DBM-Deep documentation Contained in the DBM-Deep distribution.
package DBM::Deep::Iterator::File::Index;

use 5.008_004;

use strict;
use warnings FATAL => 'all';

sub new {
    my $self = bless $_[1] => $_[0];
    $self->{curr_index} = 0;
    return $self;
}

sub at_end {
    my $self = shift;
    return $self->{curr_index} >= $self->{iterator}{engine}->hash_chars;
}

sub get_next_iterator {
    my $self = shift;

    my $loc;
    while ( !$loc ) {
        return if $self->at_end;
        $loc = $self->{sector}->get_entry( $self->{curr_index}++ );
    }

    return $self->{iterator}->get_sector_iterator( $loc );
}

1;
__END__