1 package DBM::Deep::Engine::Sector::Index;
6 use warnings FATAL => 'all';
8 use DBM::Deep::Engine::Sector;
9 our @ISA = qw( DBM::Deep::Engine::Sector );
14 my $engine = $self->engine;
16 unless ( $self->offset ) {
17 $self->{offset} = $engine->_request_index_sector( $self->size );
19 $self->write( 0, $engine->SIG_INDEX );
26 #XXX Why? -RobK, 2008-06-18
30 unless ( $self->{size} ) {
31 my $e = $self->engine;
32 $self->{size} = $self->base_size + $e->byte_size * $e->hash_chars;
38 return $self->base_size($e) + $e->byte_size * $e->hash_chars;
42 sub free_meth { return '_add_free_index_sector' }
46 my $e = $self->engine;
48 for my $i ( 0 .. $e->hash_chars - 1 ) {
49 my $l = $self->get_entry( $i ) or next;
50 $e->_load_sector( $l )->free;
59 return $self->base_size + $idx * $self->engine->byte_size;
66 my $e = $self->engine;
68 DBM::Deep->_throw_error( "get_entry: Out of range ($idx)" )
69 if $idx < 0 || $idx >= $e->hash_chars;
72 $e->StP($e->byte_size),
73 $self->read( $self->_loc_for( $idx ), $e->byte_size ),
81 my $e = $self->engine;
83 DBM::Deep->_throw_error( "set_entry: Out of range ($idx)" )
84 if $idx < 0 || $idx >= $e->hash_chars;
86 $self->write( $self->_loc_for( $idx ), pack( $e->StP($e->byte_size), $loc ) );