-#TODO: Convert this to a string
package DBM::Deep::Engine::Sector::Reference;
-use 5.006;
+use 5.006_000;
use strict;
use warnings FATAL => 'all';
my $e = $self->engine;
unless ( $self->offset ) {
- my $classname = Scalar::Util::blessed( delete $self->{data} );
- my $leftover = $self->size - $self->base_size - 3 * $e->byte_size;
+ $self->{offset} = $e->_request_data_sector( $self->size );
my $class_offset = 0;
+ my $classname = Scalar::Util::blessed( delete $self->{data} );
if ( defined $classname ) {
my $class_sector = DBM::Deep::Engine::Sector::Scalar->new({
engine => $e,
$class_offset = $class_sector->offset;
}
- $self->{offset} = $e->_request_data_sector( $self->size );
- $e->storage->print_at( $self->offset, $self->type ); # Sector type
- # Skip staleness counter
- $e->storage->print_at( $self->offset + $self->base_size,
- pack( $e->StP($e->byte_size), 0 ), # Index/BList loc
- pack( $e->StP($e->byte_size), $class_offset ), # Classname loc
- pack( $e->StP($e->byte_size), 1 ), # Initial refcount
- chr(0) x $leftover, # Zero-fill the rest
+ $self->write( 0, $self->type );
+ $self->write( $self->base_size,
+ pack( $e->StP($e->byte_size), 0 ) # Index/BList loc
+ . pack( $e->StP($e->byte_size), $class_offset ) # Classname loc
+ . pack( $e->StP($e->byte_size), 1 ) # Initial refcount
);
}
else {
- $self->{type} = $e->storage->read_at( $self->offset, 1 );
+ $self->{type} = $self->read( 0, $e->SIG_SIZE );
}
$self->{staleness} = unpack(
$e->StP($DBM::Deep::Engine::STALE_SIZE),
- $e->storage->read_at( $self->offset + $e->SIG_SIZE, $DBM::Deep::Engine::STALE_SIZE ),
+ $self->read( $e->SIG_SIZE, $DBM::Deep::Engine::STALE_SIZE ),
);
return;
my $self = shift;
my $e = $self->engine;
- my $blist_loc = $e->storage->read_at( $self->offset + $self->base_size, $e->byte_size );
- return unpack( $e->StP($e->byte_size), $blist_loc );
+ return unpack(
+ $e->StP($e->byte_size),
+ $self->read( $self->base_size, $e->byte_size ),
+ );
}
sub get_bucket_list {
key_md5 => $args->{key_md5},
});
- $engine->storage->print_at( $self->offset + $self->base_size,
- pack( $engine->StP($engine->byte_size), $blist->offset ),
- );
+ $self->write( $self->base_size, pack( $engine->StP($engine->byte_size), $blist->offset ) );
return $blist;
}
my $sector = $engine->_load_sector( $blist_loc )
- or DBM::Deep->_throw_error( "Cannot read sector at $blist_loc in get_bucket_list()" );
+ or DBM::Deep->_throw_error( "1: Cannot read sector at $blist_loc in get_bucket_list()" );
my $i = 0;
my $last_sector = undef;
while ( $sector->isa( 'DBM::Deep::Engine::Sector::Index' ) ) {
$last_sector = $sector;
if ( $blist_loc ) {
$sector = $engine->_load_sector( $blist_loc )
- or DBM::Deep->_throw_error( "Cannot read sector at $blist_loc in get_bucket_list()" );
+ or DBM::Deep->_throw_error( "2: Cannot read sector at $blist_loc in get_bucket_list()" );
}
else {
$sector = undef;
}),
});
}
+
+#XXX Why is this code here? -RobK, 2008-06-15
# my $blist = $blist_cache{$idx}
# ||= DBM::Deep::Engine::Sector::BucketList->new({
# engine => $engine,
$new_index->offset,
);
} else {
- $engine->storage->print_at( $self->offset + $self->base_size,
- pack( $engine->StP($engine->byte_size), $new_index->offset ),
- );
+ $self->write( $self->base_size, pack( $engine->StP($engine->byte_size), $new_index->offset ) );
}
$sector->clear;
my $e = $self->engine;
return unpack(
$e->StP($e->byte_size),
- $e->storage->read_at(
- $self->offset + $self->base_size + 1 * $e->byte_size, $e->byte_size,
+ $self->read(
+ $self->base_size + 1 * $e->byte_size,
+ $e->byte_size,
),
);
}
my $e = $self->engine;
return unpack(
$e->StP($e->byte_size),
- $e->storage->read_at(
- $self->offset + $self->base_size + 2 * $e->byte_size, $e->byte_size,
+ $self->read(
+ $self->base_size + 2 * $e->byte_size,
+ $e->byte_size,
),
);
}
my ($num) = @_;
my $e = $self->engine;
- $e->storage->print_at(
- $self->offset + $self->base_size + 2 * $e->byte_size,
+ $self->write(
+ $self->base_size + 2 * $e->byte_size,
pack( $e->StP($e->byte_size), $num ),
);
}